pygtk how to update gtk.Image

痞子三分冷 提交于 2019-12-12 10:19:26

问题


I have very strange problem with gtk.Image(). Simple question; how to update image? On window creation I create image and pack it… On that time I load image from disk. Now I start downloading image from url, and when it's done I just want to replace existing image with new one. I rewrite content of same file on disk and then do:

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

I have tried self._user_avatar.set_from_file(image_path) and self._user_avatar.clear() nothing works. When i restart app there is a new image and everything is ok.


回答1:


gtk.Image.set_from_pixbuf is the right method, so your problem may come from something else. Try on the most simple piece of code to reproduce your problem.

Here's a working sample:

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


来源:https://stackoverflow.com/questions/13938949/pygtk-how-to-update-gtk-image

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!