私はこれを検索しましたが、探しているものはありません。Pygtkのグラフィックスコンテキストと色の割り当て
http://www.mail-archive.com/[email protected]/msg10529.html - 誰も彼に答えませんでした。これはまさに私が経験していることです。グラフィックスコンテキストでフォアグラウンドを設定すると、実際には変化していないようです。
私はチュートリアルとFAQを読んできましたが、どちらもあまり言いません。彼らは単に白黒の文脈を使うか、壊れたリンクを与えます。私はおそらくそれがバグだと思っている。しかし、私の中の子供は、私が何かを見逃していると言い、私は実際の選択肢があるという事実を無視しています。しかし、これは良いでしょう。さらに私がこれに入ると、私はこれらの文脈と色が必要になるでしょう。
ここに私のコードスニペットがあります。
def CreatePixmapFromLCDdata(lcdP, ch, widget):
width = lcdP.get_char_width()
height = lcdP.get_char_height()
# Create pixmap
pixmap = gtk.gdk.Pixmap(widget.window, width, height)
# Working graphics contexts, wrong color
black_gc = widget.get_style().black_gc
white_gc = widget.get_style().white_gc
char_gc = widget.window.new_gc()
colormap = char_gc.get_colormap()
bg_color = NewColor(text="#78a878", colormap=colormap)
print "Before", char_gc.foreground.red, char_gc.foreground.green, char_gc.foreground.blue
char_gc.set_foreground(bg_color)
print "AFter", char_gc.foreground.red, char_gc.foreground.green, char_gc.foreground.blue
fg_color = NewColor(text="#113311", colormap=colormap)
pixmap.draw_rectangle(char_gc, True, 0, 0, width, height)
char_gc.foreground = fg_color
for j in range(lcdP.dots['y']):
k = lcdP.pixels['y']*j
for i in range(lcdP.dots['x']):
if 1<<(lcdP.dots['x']-1-i) & ch[j] == 0: continue
m = i*lcdP.pixels['y']
for jj in range(k, k+lcdP.pixels['y']-1):
for ii in range(m+1, m+lcdP.pixels['x']):
pixmap.draw_point(char_gc, ii, jj)
return pixmap
私は多分色を割り当てていたと思いました。スニペットからわかるように、私はグラフィックコンテキスト自身のカラーマップを使用しました。私は色々なカラーマップを試しました。これは最新です。私は割り当てられていない色を試してみました。 white_gcとblack_gcグラフィックスコンテキストに注目してください。私はそれらを使用すると、私は白い背景の上に黒を描くことができる。それ以外の場合(作成されたコンテキストで)、すべてが黒、fg、bgです。白の前景の色を変えると、常に黒くなります。
次は出力です。色があまり変わらないことに注意してください。私はそれが変わっていない、あるいは少なくとも視覚的には十分ではないと言っています。
Before 6 174 60340
After 5 174 60340
ここで私はどのように色を割り当てるのですか。
def NewColor(red=0, green=0, blue=0, text=None, colormap=None):
if text == None:
c = gtk.gdk.Color(red, green, blue)
else:
c = gtk.gdk.color_parse(text)
if colormap == None:
colormap = gtk.gdk.colormap_get_system()
colormap.alloc_color(c)
return c
とする必要があります。set_rgb_fg_colorはうまく動作します。いずれのドキュメントでも、このメソッドを見たことはありませんでした。先端に感謝します。それは今働く。 – Scott
神に感謝します。私はちょうどまったく同じ問題を抱えていた。なぜあなたはset_foregroundが動作しないのですか?しかし、文書化されていないset_rgb_fg_colorがあります。 – Claudiu