Python 如何在窗口中动态插入随机数目的图像
我有以下代码:Python 如何在窗口中动态插入随机数目的图像,python,image,tkinter,Python,Image,Tkinter,我有以下代码: 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_s
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…如果我使用类似的东西(这是我写的另一段代码的摘录),它们会毫无问题地显示出来:
任何指导都是非常受欢迎的,因为我仍然是tkinter的新手 将PhotoImage或其他图像对象添加到Tkinter小部件时,必须保留自己对图像对象的引用。如果不这样做,图像不会总是显示出来 问题是Tkinter/Tk接口不能正确处理对图像对象的引用;Tk小部件将保存对内部对象的引用,但Tkinter没有。当Python的垃圾收集器丢弃Tkinter对象时,Tkinter告诉Tk释放映像。但是,由于图像正在被小部件使用,Tk不会破坏它。不完全是。它只是空白图像,使其完全透明 解决方案是确保保留对Tkinter对象的引用,例如通过将其附加到小部件属性:
for i in range(0,len(data)):
photo = tk.PhotoImage(file="D:\\A\\" + data[i][0] + ".gif")
label = tk.Label(image=photo )
label.image = photo # keep a reference!
label.grid(row=data[i][1]-1, column=0)
取自使用for循环中的
grid
方法来显示标签。我以为我在输入“.grid(row=data[I][1]-1,column=0)”时已经这样做了。你能详细说明/演示一下吗?这能回答你的问题吗?
for i in range(0,len(data)):
photo = tk.PhotoImage(file="D:\\A\\" + data[i][0] + ".gif")
label = tk.Label(image=photo )
label.image = photo # keep a reference!
label.grid(row=data[i][1]-1, column=0)