如果我用循环创建它们,则看不到按钮上的图像

Don't see images on my buttons if I create them with a loop

我正在尝试在 Python 3.3.0 中制作一个程序来使用 Tkinter 进行训练,但是当我尝试将图像放在循环创建的按钮上时,我获得了一些按钮不工作(我不能点击它们,它们没有图像),最后一个正在工作并且上面有图像。这是代码:

elenco = [immagine1, immagine2, immagine3, immagine 4]
class secondWindow:

    def __init__(self):

        self.secondWindow = Tk()
        self.secondWindow.geometry ('500x650+400+30')

class mainWindow:

    def __init__(self):

        self.mainWindow = Tk()
        self.mainWindow.geometry ('1100x650+100+10')
        self.mainWindow.title('MainWindow')

    def Buttons(self, stringa):

        i = 0
        for _ in elenco:
            if stringa in _.lower():
                j = int(i/10)
                self.IM = PIL.Image.open (_ + ".jpg")
                self.II = PIL.ImageTk.PhotoImage (self.IM)             
                self.button = Button(text = _, compound = 'top', image =  self.II, command = secondWindow).grid(row = j, column = i-j*10)
                i += 1

    def mainEnter (self):

        testoEntry = StringVar()      
        self.mainEntry = Entry(self.mainWindow, textvariable = testoEntry).place (x = 900, y = 20)

        def search ():
            testoEntry2 = testoEntry.get()
            if testoEntry2 == "":
                pass
            else:
                testoEntry2 = testoEntry2.lower()
            mainWindow.Buttons(self, testoEntry2)

        self.button4Entry = Button (self.mainWindow, text = 'search', command = search).place (x = 1050, y = 17)


MW = mainWindow()
MW.mainEnter()
mainloop()

如果我尝试在没有图像的循环中创建按钮,它们会起作用:

def Buttons(self, stringa):

    i = 0

    for _ in elenco:
        if stringa in _.lower():
            j = int(i/10)
            self.button = Button(text = _, command = secondWindow).grid(row = j, column = i-j*10)
            i += 1

如果我尝试创建一个带有图像但不是循环的按钮,它也可以工作:

im = PIL.Image.open("immagine1.jpg")
ge = PIL.ImageTk.PhotoImage (im)
butt = Button(text = 'immagine', compound = 'top', image = ge, command = secondWindow).grid(row = 0, column = 0)

假设您有名为 "image-i.png"、i=0,..,9 的图片。 当我执行以下代码(使用 python 3.5)时,我获得了十个带有图像和文本的工作按钮:

from tkinter import Tk, Button, PhotoImage

root = Tk()

images = []
buttons = []

for  i in range(10):
    im = PhotoImage(master=root, file="image-%i.png" % i)

    b = Button(root, text="Button %i" % i, image=im, compound="left", 
               command=lambda x=i: print(x))
    b.grid(row=i)

    images.append(im)
    buttons.append(b)

root.mainloop()