我已經搜索了這個,但沒有什麼,我正在尋找。Pygtk圖形上下文和分配顏色
http://www.mail-archive.com/[email protected]/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
好吧,set_rgb_fg_color的作品。我從來沒有在任何文檔中看到過這種方法。謝謝你的提示。它現在有效。 – Scott 2009-06-02 18:52:03