2017-04-13 6 views
0

Ich arbeite an einem Projekt, das einem Benutzer Filme über eine GUI empfiehlt. Allerdings bin ich neu bei Python und Tkinter und kämpfe mit dem Aufruf von Funktionen und Variablen an Funktionen im Allgemeinen, als Test möchte ich zwei Entry Widgets auf der Konsole ausdrucken. Ich habe einige verschiedene Ansätze ausprobiert, aber irgendetwas scheint immer schiefzugehen. Hier ist der entsprechende Code für diesen Test:'Eingabe' Widget-Eingabe in Konsole drucken

class App(Frame): 
    def print_it(self): 
     print(mn, nr) 

    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.filename = None 
     movie_name = Entry(master) 
     movie_name.grid() 
     movie_name.delete(0, END) 
     movie_name.insert(0, "Enter Movie Name") 
     mn = movie_name.get() 
     num_recs = Entry(master) 
     num_recs.grid() 
     num_recs.delete(0, END) 
     num_recs.insert(0, "Enter Number of Movies") 
     nr = num_recs.get() 
     button1 = Button(self, text="Start", command=self.print_it) 
     button2 = Button(self, text="Exit", command=master.destroy) 
     button1.grid() 
     button2.grid() 
     self.grid() 

root = Tk() 
root.title("Recommender") 
root.geometry("500x500") 
app = App(root) 
root.mainloop() 

Die Variablen nr und mn sind offensichtlich nicht in gedruckter Form aufgerufen wird es, ive versucht, die preifixes App. und self. aber weder Arbeit. Kann mir jemand sagen, was ich tun muss, um diese Variablen aufzurufen? Vielen Dank.

Antwort

0

Guter Start.

Wenn Sie zuerst auf eine Variable von verschiedenen Methoden zugreifen möchten, muss sie mit dem 'self' benannt werden. Präfix.

Zweitens wird die __init__-Methode ausgeführt, wenn Sie starten, wenn Sie also movie_name.get() aufrufen, erhält es den Wert zum Zeitpunkt des Starts. Sie möchten den Wert, den es hatte, als die Schaltfläche gedrückt wurde (ich nehme an), so müssen Sie den get() Aufruf in die Methode verschieben, die aufgerufen wird, wenn die Schaltfläche gedrückt wird.

Drittens ist ein Eintrag leer, wenn er initialisiert wird, Sie müssen die Methode delete nicht verwenden, um ihn zu löschen.

class App(Frame): 
    def print_it(self): 
     print(self.movie_name.get(), self.num_recs.get()) 

    def __init__(self, master): 
     Frame.__init__(self, master) 
     self.filename = None 
     self.movie_name = Entry(master) 
     self.movie_name.grid() 
     self.movie_name.insert(0, "Enter Movie Name") 
     self.num_recs = Entry(master) 
     self.num_recs.grid() 
     self.num_recs.insert(0, "Enter Number of Movies") 
     button1 = Button(self, text="Start", command=self.print_it) 
     button2 = Button(self, text="Exit", command=master.destroy) 
     button1.grid() 
     button2.grid() 
     self.grid() 

root = Tk() 
root.title("Recommender") 
root.geometry("500x500") 
app = App(root) 
root.mainloop() 
+0

Danke, das füllt tatsächlich ein paar Leerzeichen aus und war sehr nützlich – Keegan