我使用的PyGTK与PIL。 我已经想出了一个办法来PIL转换Image
s到gtk.gdk.Pixbuf
秒。 我要做的,显示的pixbuf是我创建了一个gtk.gdk.Image
,然后用img.set_from_pixbuf
。 我现在想画几条线在此图像。 显然,我需要一个Drawable
做到这一点。 我已经开始翻翻文档,但我已经有8-10窗户打开,它不是简单的。
所以-是什么魔力,我需要键入获得可绘制代表我的画,画上它的一些东西,然后把它变成一个gdk.Image
,所以我可以在我的应用程序显示呢?
我在做类似的东西(绘图到gdk.Drawable),我发现set_foreground不起作用。 实际上把利用我想要的颜色,我用了以下内容:
# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))
哦,我的上帝。 如此痛苦。 这里是:
w,h = pixbuf.get_width(), pixbuf.get_height()
drawable = gtk.gdk.Pixmap(None, w, h, 24)
gc = drawable.new_gc()
drawable.draw_pixbuf(gc, pixbuf, 0, 0, 0, 0, -1, -1)
#---ACTUAL DRAWING CODE---
gc.set_foreground(gtk.gdk.Color(65535, 0, 0))
drawable.draw_line(gc, 0, 0, w, h)
#-------------------------
cmap = gtk.gdk.Colormap(gtk.gdk.visual_get_best(), False)
pixbuf.get_from_drawable(drawable, cmap, 0, 0, 0, 0, w, h)
它实际上绘制黑线ATM,而不是红色的,所以我有一些工作剩下要做...
您是否尝试过开罗方面? 对不起,我好像在你的岗位倾斜评论。 因此,我在这里张贴。
我还没有尝试过这个自己,但我相信,开罗是你的朋友,当谈到在GTK绘图。 所以我认为这是对你有用,你可以设置为你的pixbuf开罗方面的来源。
gdkcairocontext
image = gtk.Image()
pixmap,mask = pixbuf.render_pixmap_and_mask() # Function call
cm = pixmap.get_colormap()
red = cm.alloc_color('red')
gc = pixmap.new_gc(foreground=red)
pixmap.draw_line(gc,0,0,w,h)
image.set_from_pixmap(pixmap,mask)
应该做的伎俩。
您应该连接到expose-event
(GTK 2)或draw
(GTK 3)信号。 在该处理程序,只需使用image.window
得到widget的gtk.gdk.Window
; 这是一个子类gtk.gdk.Drawable
,所以你可以在上面画画。