Я пытаюсь сделать программу в Python 3.3.0 для тренировки с помощью Tkinter, но когда я пытаюсь поместить изображения на кнопки, созданные в loop, я получаю несколько кнопок, которые не работают (я не могу на них нажимать, и у них нет изображений), а последний работает и с изображением на нем. Здесь есть код:Не вижу изображений на моих кнопках, если я создаю их с помощью цикла
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)
Вы только держать ссылку на * последнее * изображение и последнюю пуговицу. Вместо этого используйте списки ('self.buttons.append (...)'). – jonrsharpe
@jonrsharpe Я пробовал со словарями, и он не работает, я попробую со списком ... – vladi
Кроме того, вы сохраняете результат '.grid', который на самом деле' None', а не сама кнопка. – jonrsharpe