2016-12-29 16 views
1

Ich versuche mich selbst Python zu lehren, also entschuldige mich für eine dumme Frage, aber das hat mich für ein paar Tage verrückt gemacht. Ich habe mir andere Fragen zum selben Thema hier angeschaut, aber ich bin immer noch nicht in der Lage, dies zum Laufen zu bringen.Schließen eines Toplevel Tkinter Fensters

Ich habe ein Top-Level-Fenster erstellt, um den Benutzer nach einer Eingabeaufforderung zu fragen und möchte, dass das Fenster geschlossen wird, wenn der Benutzer die Taste seiner Wahl drückt. Hier liegt das Problem, ich kann es nicht aus Liebe oder Geld schließen. Mein Code ist unten enthalten.

Vielen Dank für jede Hilfe.

from Tkinter import * 

root = Tk() 

board = Frame(root) 
board.pack() 

square = "Chat" 
cost = 2000 

class buyPrompt: 

     def __init__(self): 
      pop = Toplevel() 

      pop.title("Purchase Square") 

      Msg = Message(pop, text = "Would you like to purchase %s for %d" %       (square, cost)) 
      Msg.pack() 


      self.yes = Button(pop, text = "Yes", command = self.yesButton) 
      self.yes.pack(side = LEFT) 
      self.no = Button(pop, text = "No", command = self.noButton) 
      self.no.pack(side = RIGHT) 

      pop.mainloop() 
     def yesButton(self): 
         return True 
         pop.destroy 
     def noButton(self): 
         return False 

Ich habe versucht, eine ganze Reihe von verschiedenen Möglichkeiten, pop.destroy zu tun, aber keiner scheint ich die Dinge zu arbeiten, habe versucht sind;

pop.destroy() 
pop.destroy 
pop.exit() 
pop.exit 

Danke

Antwort

2

Das Verfahren in der Tat zu nennen, ist destroy, auf dem pop Objekt.

Innerhalb der yesButton Methode bezieht sich pop jedoch auf etwas, das unbekannt ist.

self.pop = Toplevel() 

Dann Innere Ihrer yesButton Methode, rufen Sie die destroy Methode auf das self.pop Objekt:

Wenn Ihr Objekt initialisiert wird, in der __init__ Methode, sollten Sie das pop Element als Attribut self setzen:

self.pop.destroy() 

über den Unterschied zwischen pop.destroy und pop.destroy():

In Python ist so ziemlich alles ein Objekt. Eine Methode ist also auch ein Objekt.

Wenn Sie pop.destroy schreiben, verweisen Sie auf das Methodenobjekt mit dem Namen destroy, das zum Objekt pop gehört. Es ist im Grunde das gleiche wie Schreiben 1 oder "hello": es ist keine Aussage, oder wenn Sie es vorziehen, nicht eine Aktion.

Wenn Sie pop.destroy() schreiben, sagen Sie Python zu Anruf das pop.destroy Objekt, das heißt, seine __call__ Methode auszuführen.

Mit anderen Worten, pop.destroy nichts tun zu schreiben (außer für den Druck etwas wie <bound method Toplevel.destroy of...> bei der Ausführung im interaktiven Interpreter), während pop.destroy() effektiv die pop.destroy Methode ausgeführt wird.

+0

Vielen Dank für eine so klare und prägnante Antwort. Rechtes Bein, das hat mein Problem gelöst und half auch mit meinem Zukunftswissen beim Aufruf von Methoden. Große Antwort und schnell auch, Nochmals vielen Dank – Shallon

Verwandte Themen