Python 特金特没有';t按预期在按钮上放置图像

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):

我使用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):
    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