Python 特金特没有';t按预期在按钮上放置图像
我使用PIL创建图像,不将它们保存在任何地方,因为它们每次都会不同,并尝试将这些图像放在按钮上。问题是,出于某种原因,只有最后一张图片被放在按钮上。这是我的代码:Python 特金特没有';t按预期在按钮上放置图像,python,python-2.7,tkinter,python-imaging-library,Python,Python 2.7,Tkinter,Python Imaging Library,我使用PIL创建图像,不将它们保存在任何地方,因为它们每次都会不同,并尝试将这些图像放在按钮上。问题是,出于某种原因,只有最后一张图片被放在按钮上。这是我的代码: from PIL import ImageDraw from PIL import ImageFont from Tkinter import * master = Tk() W, H = (70,70) from PIL import Image from PIL import ImageTk def fun(meth):
from PIL import ImageDraw
from PIL import ImageFont
from Tkinter import *
master = Tk()
W, H = (70,70)
from PIL import Image
from PIL import ImageTk
def fun(meth):
print meth
return
for i in range(0,5):
img = Image.new("RGB", (W, H), (255,0,0))
draw = ImageDraw.Draw(img)
text_string = str(i)+','+str(i+1)
font = ImageFont.truetype("arial.ttf", 25)
w, h = draw.textsize(text_string, font=font)
draw.text(((W-w)/2,(H-h)/2), str(i)+','+str(i+1),(0,0,0), font=font )
imagetk = ImageTk.PhotoImage(img)
b = Button(master, image=imagetk, command=lambda method=text_string: fun(method))
b.grid(row=0, column=i, padx=20)
#img.save(path+'.png', "PNG")
master.mainloop()
对于我来说,此程序的输出如下所示
在循环结束时,我正在将图像保存到磁盘,我看到其他图像的创建与预期一样,但由于某些原因,它们没有被放在其他按钮上。我刚才还注意到,其他按钮甚至不响应单击,只有最后一个按钮的行为符合预期 您没有创建外部引用。我只是添加了一个
refs
列表,现在它可以正常工作了:
refs = [] # new
for i in range(0,5):
img = Image.new("RGB", (W, H), (255,0,0))
draw = ImageDraw.Draw(img)
text_string = str(i)+','+str(i+1)
font = ImageFont.truetype("arial.ttf", 25)
w, h = draw.textsize(text_string, font=font)
draw.text(((W-w)/2,(H-h)/2), str(i)+','+str(i+1),(0,0,0), font=font )
imagetk = ImageTk.PhotoImage(img)
b = Button(master, image=imagetk, command=lambda method=text_string: fun(method))
b.grid(row=0, column=i, padx=20)
refs.append(imagetk) # new
您没有创建外部引用。我只是添加了一个
refs
列表,现在它可以正常工作了:
refs = [] # new
for i in range(0,5):
img = Image.new("RGB", (W, H), (255,0,0))
draw = ImageDraw.Draw(img)
text_string = str(i)+','+str(i+1)
font = ImageFont.truetype("arial.ttf", 25)
w, h = draw.textsize(text_string, font=font)
draw.text(((W-w)/2,(H-h)/2), str(i)+','+str(i+1),(0,0,0), font=font )
imagetk = ImageTk.PhotoImage(img)
b = Button(master, image=imagetk, command=lambda method=text_string: fun(method))
b.grid(row=0, column=i, padx=20)
refs.append(imagetk) # new