2016-07-14 2 views
-1

Я пытаюсь сделать программу в 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) 
+1

Вы только держать ссылку на * последнее * изображение и последнюю пуговицу. Вместо этого используйте списки ('self.buttons.append (...)'). – jonrsharpe

+0

@jonrsharpe Я пробовал со словарями, и он не работает, я попробую со списком ... – vladi

+2

Кроме того, вы сохраняете результат '.grid', который на самом деле' None', а не сама кнопка. – jonrsharpe

ответ

0

Предположим, у вас есть изображения с именем «image-i.png», i = 0, .., 9. Когда я выполнить следующий код (с питоном 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() 
+0

А, ок ... Я постараюсь код таким образом ... Моя ошибка заключалась в том, что я делал списки только с кнопками или только с изображениями ... Забыл сделать что-то одно и другое ... Спасибо – vladi

 Смежные вопросы

  • Нет связанных вопросов^_^