如果我使用循环

时间:2016-07-14 10:14:41

标签: image button tkinter python-3.3

我正在尝试用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)

1 个答案:

答案 0 :(得分:0)

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

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