pygtk的:画线到gtk.gdk.Pixbuf(pygtk: Draw lines onto a

2019-07-31 04:22发布

我使用的PyGTK与PIL。 我已经想出了一个办法来PIL转换Image s到gtk.gdk.Pixbuf秒。 我要做的,显示的pixbuf是我创建了一个gtk.gdk.Image ,然后用img.set_from_pixbuf 。 我现在想画几条线在此图像。 显然,我需要一个Drawable做到这一点。 我已经开始翻翻文档,但我已经有8-10窗户打开,它不是简单的。

所以-是什么魔力,我需要键入获得可绘制代表我的画,画上它的一些东西,然后把它变成一个gdk.Image ,所以我可以在我的应用程序显示呢?

Answer 1:

我在做类似的东西(绘图到gdk.Drawable),我发现set_foreground不起作用。 实际上把利用我想要的颜色,我用了以下内容:

# Red!
gc.set_rgb_fg_color(gtk.gdk.Color(0xff, 0x0, 0x0))


Answer 2:

哦,我的上帝。 如此痛苦。 这里是:

    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,而不是红色的,所以我有一些工作剩下要做...



Answer 3:

您是否尝试过开罗方面? 对不起,我好像在你的岗位倾斜评论。 因此,我在这里张贴。

我还没有尝试过这个自己,但我相信,开罗是你的朋友,当谈到在GTK绘图。 所以我认为这是对你有用,你可以设置为你的pixbuf开罗方面的来源。

gdkcairocontext



Answer 4:

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)

应该做的伎俩。



Answer 5:

您应该连接到expose-event (GTK 2)或draw (GTK 3)信号。 在该处理程序,只需使用image.window得到widget的gtk.gdk.Window ; 这是一个子类gtk.gdk.Drawable ,所以你可以在上面画画。



文章来源: pygtk: Draw lines onto a gtk.gdk.Pixbuf