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が描画されるだけですが、白い画像しか表示されません。pixbuf を gtk イメージに入れてロードすることをテストしました。ここで何が間違っていますか?

4

2 に答える 2

3

widget.queue_draw()関数の最後にある別のexposeイベントを呼び出す関数を取得する必要があることがわかりました。関数は最初に一度だけ呼び出されていましたが、この時点で使用可能なノードがなかったため、何も描画されていませんでした。

于 2009-04-22T07:46:15.337 に答える
3

これを行うにはカイロを使用できます。まず、gtk.DrawingArea ベースのクラスを作成し、公開イベントを公開関数に接続します。

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

これにより、公開イベントが発行されるたびに画像が描画されます。

于 2009-05-23T03:41:31.560 に答える