2017-10-04 2 views
-1

Je veux que mon code puisse changer l'aperçu de la pizza affichée en une pizza arbitraire, mais je n'arrive pas à comprendre comment l'exprimer. (je zoomant parce que je utilise de minuscules images)Changer l'image de la liste tkinter

from tkinter import * 
from itertools import cycle 

class buttonInitialize: 
    def __init__ (self,enabler): 
     leftframe=Frame(enabler) 
     leftframe.pack(side=LEFT) 
     rightframe=Frame(enabler) 
     rightframe.pack(side=RIGHT) 

     pizzaList=[] 
     pizzaList.append(PhotoImage(file="0.png").zoom(10)) 
     pizzaList.append(PhotoImage(file="1.png").zoom(10)) 


     self.otherButton=Button(leftframe,text="??",command=self.makePizza(1)) 
     self.otherButton.pack() 

     self.printButton=Button(rightframe,image=pizzaList[0]) 
     self.printButton.pack() 

    def makePizza(self,index): 
     self.printButton["image"]=self.pizzaList[index] 
root=Tk() 
c=buttonInitialize(root) 
root.mainloop() 

En ce moment, je reçois l'erreur

AttributeError: 'buttonInitialize' object has no attribute 'pizzaList' 

Merci!

+1

'pizzaList' est différent de' self.pizzaList'. – Lafexlos

+0

Je l'ai essayé dans les deux sens, et il jette toujours la même erreur. Savez-vous comment je peux mettre à jour l'image? –

+0

Ajouté une réponse. Hope, cela efface un peu. – Lafexlos

Répondre

1

self.pizzaList -> variable de classe
pizzaList -> variable locale

Pour accéder à pizzaListmakePizza, vous devez utiliser self. préfixe pour faire pizzaList une variable de cette classe lors de la création en __init__.

class buttonInitialize: 
    def __init__ (self,enabler): 
     ... 
     ... 
     self.pizzaList= [] 
     self.pizzaList.append(PhotoImage(file="0.png").zoom(10)) 
+0

Merci! Cette partie fixe du problème. J'obtiens maintenant l'erreur AttributeError: l'objet 'buttonInitialize' n'a pas d'attribut 'printButton' –

+0

@I_Queerly_Belong_Here Le code que vous avez fourni ci-dessus, ne devrait pas jeter cette erreur. Il doit y avoir une faute de frappe quelque part. Votre erreur _new_ a toujours la même source. – Lafexlos

+0

Oh, j'ai trouvé le problème, je mettais juste à jour le panneau avec la syntaxe intertools, pas la syntaxe brute de Tkinter. –