рисование pixbuf на области рисования с использованием pygtk и glade

Я пытаюсь сделать приложение GTK в python, где я могу просто нарисовать загруженное изображение на экране, где я нажимаю на него. Способ, которым я пытаюсь это сделать, – загрузить изображение в файл 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 на изображении в верхнем левом углу, но ничего не показывает, кроме белого изображения. Я тестировал, что pixbuf загружается, помещая его в образ gtk. Что я здесь делаю неправильно?

    Я выяснил, что мне просто нужно заставить функцию вызвать другое событие экспонирования с widget.queue_draw() в конце функции. Функция была вызвана только один раз в начале, и в этот момент не было доступных узлов, поэтому ничего не рисовалось.

    Вы можете использовать cairo для этого. Во-первых, создайте класс, основанный на gtk.DrawingArea, и подключите событие expose к вашей функции exose.

     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() 

    Это будет рисовать изображение каждый раз, когда выдается событие экспонирования.