Я искал по этому, но ничего не имеет то, что я ищу.
http://www.mail-archive.com/pygtk@daa.com.au/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