2017-12-03 4 views
0

Dies ist ein Teil meines GUI-Programms, mit dem ich ein Problem habe und hoffe, dass mir jemand helfen könnte. Was ich versuche zu tun ist, wenn Sie den Check-Button klicken, sollte es den Preis auf dem Text-Widget zeigen, aber wenn ich den Check-Button klicken es gibt mir eine Fehlermeldung:Python - Tkinter CheckButton Ausgabe

File "E:\Phython\Theater.py", line 147, in update_text if self.matinee_price.get(): AttributeError: 'Checkbutton' object has no attribute 'get'

def matinee_pricing(self): 
    #Purchase Label 
    self.theater_label = tkinter.Label(text='Purchase Theater Seats Here', font=('Verdana', 15, 'bold')) 
    self.theater_label.grid(row=2, column=10) 
    #Checkbutton 
    self.matinee_price = BooleanVar() 
    self.matinee_price = tkinter.Checkbutton(text = '101 \nthru \n105', font=('Verdana', 10), bg='light pink', height=5, width=10,\ 
              variable = self.matinee_price, command = self.update_text) 
    self.matinee_price.grid(row=5, column=9) 

    self.result = tkinter.Text(width=10, height=1, wrap = WORD) 
    self.result.grid(row=20, column=10) 

def update_text(self): 
    price = '' 

    if self.matinee_price.get(): 
     price += '$50' 

    self.result.delete(0.0, END) 
    self.result.insert(0.0, price) 
+0

Sie sollten tkinter wirklich nicht zweimal so importieren, es ist eine schlechte Übung. Siehe [this] (https://stackoverflow.com/questions/47479965/is-there-a-point-to-import-two-different-ways-in-a-program) für weitere Informationen. – Nae

Antwort

0

Sie‘ Überschreibt die boolesche Variable mit dem Kontrollkästchen selbst. Die Deklaration von BoolenaVar benötigt einen anderen Namen und Ihre andere Funktion muss diesen Namen überprüfen.

Außerdem verwenden die Kontrollkästchen standardmäßig 0 und 1, um ihren Status zu beschreiben. Wenn Sie einen booleschen Wert verwenden möchten, müssen Sie onvalue und offvalue entsprechend ändern.

def matinee_pricing(self): 
    # [...] 
    self.matinee_price_var = BooleanVar() # Different name for the variable. 
    self.matinee_price = tkinter.Checkbutton(text = '101 \nthru \n105', font=('Verdana', 10), bg='light pink', height=5, width=10,\ 
              variable = self.matinee_price_var, onvalue=True, offvalue=False, command = self.update_text) 
    # Add onvalue, offvalue to explicitly set boolean states. 
    # [...] 

def update_text(self): 
    price = '' 

    # Use the variable, not the checkbox 
    if self.matinee_price_var.get(): 
     price += '$50' 
    #[...] 

S.S .: Sie brauchen keine Linien innerhalb einer Klammer zu unterbrechen. Python nimmt an, dass alles innerhalb der Klammern Teil des vorhergehenden Befehls ist, in diesem Fall das Kontrollkästchen. Stellen Sie nur sicher, dass Sie keine Syntaxfehler erhalten, und teilen Sie einzelne Argumente nicht über mehrere Zeilen auf.

+1

Müssen Sie nicht auch 'variable = self.matinee_price' in' variable = self.matee_price_var' ändern? – Nae

+0

Ja, natürlich habe ich vergessen, das zu ändern. Danke für die Verbesserung. – ikom

+0

Danke !! Funktioniert jetzt gut. Ich bin neu in Python und diese Klasse, die ich nehme, ist eher ein Workshop als ein Vortrag, so dass Internet/Youtube meine einzige Quelle ist. – IceBuko

Verwandte Themen