2016-07-14 8 views
-1

Ich versuche ein Programm in Python 3.3.0 zu erstellen, um mit Tkinter zu trainieren, aber wenn ich versuche, Bilder auf Schaltflächen zu setzen, die in einem erstellt werden Schleife, ich bekomme ein paar Tasten, die nicht funktionieren (ich kann nicht auf sie klicken und sie haben keine Bilder), und das letzte funktioniert und mit dem Bild darauf. Hier ist der Code:Ich sehe keine Bilder auf meinen Tasten, wenn ich sie mit einer Schleife erstelle

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

Wenn ich versuche Tasten in einer Schleife zu erstellen, ohne Bilder, sie funktionieren:

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 

Und wenn ich versuche, einen Knopf mit einem Bild zu erstellen, aber nicht in einer Schleife funktioniert es auch:

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

Sie sind nur einen Verweis auf das * * letzte Bild, und die letzte Taste halten. Verwenden Sie stattdessen Listen ('self.buttons.append (...)'). – jonrsharpe

+0

@jonrsharpe Ich habe es mit Wörterbüchern versucht und es funktioniert nicht, ich werde es mit einer Liste versuchen ... – vladi

+2

Zusätzlich speichern Sie das Ergebnis von '.grid', was eigentlich' None' ist, nicht das Knopf selbst. – jonrsharpe

Antwort

0

Nehmen wir an, Sie haben Bilder mit dem Namen "image-i.png", i = 0, .., 9. Wenn ich den folgenden Code (mit Python 3.5) ausführen ich erhalte zehn Arbeits Tasten mit Bild und Text:

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

Ah ok ... ich werde es versuchen Code auf diese Weise ... Mein Fehler war, dass ich Listen mit nur Knöpfen oder nur Bildern machte ... Vergaß, um eine Sache und andere zu tun ... Danke – vladi

Verwandte Themen