2009-04-22 9 views
1

私は、クリックした画面に読み込んだイメージを描画できる、PythonでGTKアプリケーションを作成しようとしています。私がこれをやろうとしているのは、画像をpixbufファイルにロードし、そのpixbufを描画領域に描画することです。pygtkとgladeを使って描画エリアに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イメージに入れてロードすることをテストしました。私はここで間違って何をしていますか?

答えて

2

私は、関数の最後にwidget.queue_draw()という別の公開イベントを呼び出す必要があることを知りました。この関数は最初に一度だけ呼び出されていました。この時点ではノードは使用できず、何も描画されていませんでした。

1

これを行うにはカイロを利用できます。まず、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イベントが発生するたびにイメージを描画します。

関連する問題