pygtk如何更新gtk.Image [英] pygtk how to update gtk.Image

查看:202
本文介绍了pygtk如何更新gtk.Image的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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()
无效。当我重新启动应用程序时,会有一个新的图像,并且一切正常。 解决方案

gtk.Image.set_from_pixbuf 是正确的方法,所以你的问题可能来自别的东西。尝试使用最简单的一段代码来重现您的问题。



以下是一个工作示例:

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

pics = []
clicks = 0

def on_destroy(小工具):
gtk.main_quit()
返回False

def on_button_clicked(小工具,图片):
全局点击
点击+ = 1
image.set_from_pixbuf(图片[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.pa ck_start(button)

window.add(vbox)
window.show_all()
$ b $ if if __name__ ==__main__:
create()
gtk.main()


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.

解决方案

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

这篇关于pygtk如何更新gtk.Image的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆