使用PyGTK和Glade在绘图区域上绘制Pixbuf

3

我正在尝试用Python制作一个GTK应用程序,可以在单击屏幕上的位置时将加载的图像绘制出来。我尝试的方法是将图像加载到pixbuf文件中,然后将该pixbuf绘制到绘图区域中。

主要代码行如下:

def drawing_refresh(self, widget, event):
    #clear the screen
    widget.window.draw_rectangle(widget.get_style().white_gc, True, 0, 0, 400, 400) 
    for n in self.nodes:
         widget.window.draw_pixbuf(widget.get_style().fg_gc[gtk.STATE_NORMAL],
                                   self.node_image, 0, 0, 0, 0)

我只是希望将pixbuf绘制到左上角的图像中,但除了白色图像外,没有显示任何内容。 我已经通过将它放入gtk图像中来测试pixbuf是否加载。 我在这里做错了什么?

2个回答

3
您可以使用cairo来实现此功能。首先,创建一个基于gtk.DrawingArea的类,并将expose-event连接到您的expose函数。
class draw(gtk.gdk.DrawingArea):
    def __init__(self):
        self.connect('expose-event', self._do_expose)
        self.pixbuf = self.gen_pixbuf_from_file(PATH_TO_THE_FILE)

    def _do_expose(self, widget, event):
        cr = self.window.cairo_create()
        cr.set_operator(cairo.OPERATOR_SOURCE)
        cr.set_source_rgb(1,1,1)
        cr.paint()
        cr.set_source_pixbuf(self.pixbuf, 0, 0)
        cr.paint()

每次发出expose-event时,这将绘制图像。

3

我发现只需在函数结尾处调用另一个公开的事件,使用widget.queue_draw()。该函数仅在开始时调用一次,并且此时没有可用节点,因此没有任何内容被绘制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接