我有以下代码:
import tkinter as tk
data = [['A',1],['B',2],['C',3],['D',4]]
def ranking():
root = tk.Tk()
root.focus_force()
windowWidth = root.winfo_reqwidth()
windowHeight = root.winfo_reqheight()
positionRight = int(root.winfo_screenwidth()/2 - windowWidth/2)
positionDown = int(root.winfo_screenheight()/2 - windowHeight/2)
root.geometry("+{}+{}".format(positionRight, positionDown))
for i in range(0,len(data)):
tk.Label(image=tk.PhotoImage(file="D:\\A\\" + data[i][0] + ".gif")).grid(row=data[i][1]-1, column=0)
root.mainloop()
ranking()
我想做的是在窗口中显示随机数目的图片(无论在任何时刻插入数据中的是什么)(按照数据中指示的顺序),但是如果我当前运行代码,它只会导致一个空白窗口。图片的名称字面上是a,B,C…如果我使用类似的东西(这是我写的另一段代码的摘录),它们会毫无问题地显示出来:
img2 = tk.PhotoImage(file="D:\\A\\" + choice2 + ".gif")
label_img2 = tk.Label(image=img2)
label_img2.grid(row=2, column=1)
任何指导都是非常受欢迎的,因为我仍然是tkinter的新手
将PhotoImage或其他图像对象添加到Tkinter小部件时,必须保留自己对图像对象的引用。如果不这样做,图像不会总是显示出来
问题是Tkinter/Tk接口不能正确处理对图像对象的引用;Tk小部件将保存对内部对象的引用,但Tkinter没有。当Python的垃圾收集器丢弃Tkinter对象时,Tkinter告诉Tk释放映像。但是,由于图像正在被小部件使用,Tk不会破坏它。不完全是。它只是空白图像,使其完全透明
解决方案是确保保留对Tkinter对象的引用,例如通过将其附加到小部件属性:
摘自Why do my Tkinter images not appear?
相关问题 更多 >
编程相关推荐