如何在tkinter中向窗口小部件添加图像?
为什么当我使用此代码时,它不起作用:
some_widget.config(image=PhotoImage(file="test.png"), compound=RIGHT)
但这确实有用吗?:
an_image=PhotoImage(file="test.png")
some_widget.config(image=anImage, compound=RIGHT)
答案 0 :(得分:7)
当您尝试在第一个版本中使用它时,您的图像会被垃圾收集。
您必须在Python程序中保留对图像对象的引用,方法是将其存储在全局变量中,或者将其附加到另一个对象。
在第二个版本中,图像在全局级别声明。
这是另一个展示这个问题的例子,你希望它也可以工作,毕竟它只是在函数中的相同代码
不起作用:
import tkinter as tk
from PIL import ImageTk
root = tk.Tk()
def make_button():
b = tk.Button(root)
image = ImageTk.PhotoImage(file="1.png")
b.config(image=image)
b.pack()
make_button()
root.mainloop()
工作:
import tkiner as tk
from PIL import ImageTk
root = tk.Tk()
def make_button():
b = tk.Button(root)
image = ImageTk.PhotoImage(file="1.png")
b.config(image=image)
b.image = image
b.pack()
make_button()
root.mainloop()
为什么呢? make_button
中的变量是该函数的本地变量。如果你在一个类中遇到这种类型的问题,也一样。