所以我正在用tkinter和PIL用python写基本的东西,这里的问题是当我运行程序时,只有最后一个按钮显示了我要求他显示的项目的图像。
因此,我的程序应从txt文档中包含游戏冠军名称的行中提取项目名称。
文档中的每一行看起来都像“ ItemName/stat1/stat2/stat3/ChampionName
”。
然后该代码应该创建带有项目图片的按钮(我确保将png和.txt中的项目名称命名为相同,并将所有内容放置在同一文件夹中),但最后,只有最后一个按钮上有图像。
我尝试过的:
我的第一次尝试:
from PIL import Image, ImageTk
import tkinter as tk
itemwindo = tk.Tk()
itemwindo.title("Items")
data = open("Ressource.txt","r")
for line in data:
if 'Vi' in line:
(a,b,c,d,e) = line.split("/")
icon = ImageTk.PhotoImage(Image.open(a + '.png'))
bt = tk.Button(itemwindo,image=icon)
bt.pack()
itemwindo.mainloop()
第二个是数组:
data = open("Ressource.txt","r")
imglist = arr.array('i')
for line in data:
if 'Vi' in line:
(a,b,c,d,e) = line.split("/")
icon = ImageTk.PhotoImage(Image.open(a + '.png'))
imglist.extend([icon])
p = len(imglist)
bt = tk.Button(itemwindo,image=imglist[p])
bt.pack()
itemwindo.mainloop()
我希望每个按钮都能在其上显示附属项目的图片。
答案 0 :(得分:1)
在创建按钮的循环中,您使用相同的名称 每个图像。每次迭代都会创建一个新对象, 以前的按钮不再能找到对先前图像的引用。
要解决此问题,您可以分配按钮的image
属性
在创建时,如果重用icon
或bt
名称,则不再有任何区别。研究以下示例:
import tkinter as tk
itemwindo = tk.Tk()
file_list = ['beer.png', 'test.gif']
for file in file_list:
icon = tk.PhotoImage(file=file)
bt = tk.Button(itemwindo, image=icon)
bt.pack()
bt.image = icon # Save reference to icon in button
itemwindo.mainloop()