我已经对此进行了搜索,但没有我想要的东西。
http://www.mail-archive.com/pygtk@daa.com.au/msg10529.html——没有人回答他。这正是我正在经历的。当我在图形上下文中设置前景时,它似乎并没有真正改变。
我已经通过教程和常见问题解答,但都没有说太多。他们要么只使用黑白上下文,要么给你断开的链接。我想也许这是一个错误。但是我内心的孩子说我只是错过了一些东西,而我一直无视我有一个可行的选择这一事实。不过这样会更好。我越深入,我就越需要这些上下文和颜色。
这是我的代码片段。
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