0

gtk.Image() に非常に奇妙な問題があります。簡単な質問です。画像を更新するには?ウィンドウの作成時にイメージを作成してパックします... その際、ディスクからイメージを読み込みます。URLから画像のダウンロードを開始し、完了したら、既存の画像を新しい画像に置き換えたいだけです。ディスク上の同じファイルの内容を書き換えてから、次のようにします。

    pixbuf = gtk.gdk.pixbuf_new_from_file(image_path)
    self._user_avatar.set_from_pixbuf(pixbuf)

self._user_avatar.set_from_file(image_path) と self._user_avatar.clear() を試しましたが、何も機能しません。アプリを再起動すると、新しいイメージがあり、すべて問題ありません。

4

1 に答える 1

2

gtk.Image.set_from_pixbufは正しい方法であるため、問題は別の原因で発生する可能性があります。最も単純なコードで問題を再現してみてください。

これが実際のサンプルです:

import pygtk
pygtk.require('2.0')
import gtk

pics = []
clicks = 0

def on_destroy (widget):
    gtk.main_quit()
    return False

def on_button_clicked (widget, image):
    global clicks
    clicks += 1
    image.set_from_pixbuf (pics[clicks % len(pics)])

def create ():
    window = gtk.Window(gtk.WINDOW_TOPLEVEL)
    window.connect("destroy", on_destroy)

    pics.append (gtk.gdk.pixbuf_new_from_file("sample1.png"))
    pics.append (gtk.gdk.pixbuf_new_from_file("sample2.png"))

    image = gtk.Image()
    image.set_from_pixbuf(pics[0])

    button = gtk.Button ("Switch Image")
    button.connect("clicked", on_button_clicked, image)

    vbox = gtk.VBox()
    vbox.pack_start (image)
    vbox.pack_start (button)

    window.add(vbox)
    window.show_all()

if __name__ == "__main__":
    create()
    gtk.main()
于 2012-12-19T09:29:41.937 に答える