use*_*741 5 python user-interface tkinter
我已将图像加载到 tkinter 标签,该图像显示在该标签中。当我按下按钮时,我需要更改该图像。按下按钮时,旧图像消失了,但新图像未显示我的代码是
import Tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
def change_pic(labelname):
photo1 = ImageTk.PhotoImage(Image.open("demo.jpg"))
labelname.configure(image=photo1)
print "updated"
vlabel=tk.Label(root)
photo = ImageTk.PhotoImage(Image.open('cardframe.jpg'))
vlabel.configure(image=photo)
vlabel.pack()
b2=tk.Button(root,text="Capture",command=lambda:change_pic(vlabel))
b2.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
在 中def change_pic(labelname),您需要添加labelname.photo = photo1以确保photo1不被垃圾收集。
def change_pic(labelname):
photo1 = ImageTk.PhotoImage(Image.open("demo.jpg"))
labelname.configure(image=photo1)
labelname.photo = photo1
print "updated"
Run Code Online (Sandbox Code Playgroud)
PS看起来像labelname.photo = photo1和labelname.image = photo1工作。
查看更多详细信息:http : //effbot.org/tkinterbook/label.htm
您可以使用标签来显示 PhotoImage 和 BitmapImage 对象。执行此操作时,请确保保留对图像对象的引用,以防止 Python 的内存分配器对其进行垃圾回收。您可以使用全局变量或实例属性,或者更简单,只需向小部件实例添加一个属性即可。
进行了以下编辑:
您的工作代码如下所示:
import Tkinter as tk
from PIL import Image, ImageTk
def change_pic():
vlabel.configure(image=root.photo1)
print "updated"
root = tk.Tk()
photo = 'cardframe.jpg'
photo1 = "demo.jpg"
root.photo = ImageTk.PhotoImage(Image.open(photo))
root.photo1 = ImageTk.PhotoImage(Image.open(photo1))
vlabel=tk.Label(root,image=root.photo)
vlabel.pack()
b2=tk.Button(root,text="Capture",command=change_pic)
b2.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)