2017-02-28 6 views
0

Derzeit ist mein Code:Tkinter innerhalb einer Funktion Bindung an

from tkinter import * 

class Application(Frame): 

    def a(self, event = None): 

     print ("a") 

    def create_widgets(self): 

     def b(event = None): 

      print(entry.get()) 

     entry = Entry() 
     entry.grid(row = 1, column = 1) 
     Button(text = "b", command = b).grid(row = 1, column = 2) 

    def __init__(self, master = None): 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 
     master.bind("<Return>", b) 

root = Tk() 
app = Application(master = root) 
app.mainloop() 

es bisher nennt, aber self.a mit self.b ersetzen, um es stattdessen zu machen rufen b Attribute bringt: ‚Anwendung‘ Objekt hat kein Attribut 'b' und mit nur b gibt ein NameError zurück: 'b' ist nicht definiert.

Also wie kann ich den Bind-Aufruf b wie die Schaltfläche machen?

Antwort

0

So how can I make the bind call b like the button?

Meiner Meinung nach, ist die beste Lösung b eine richtige Methode der Klasse und nicht um eine verschachtelte Funktion zu machen. Machen Sie auch Ihre Widgets richtige Attribute und der Code wird viel einfacher zu schreiben:

class Application(Frame): 
    def a(self, event = None): 
     print ("a") 

    def b(self, event = None): 
     print(self.entry.get()) 

    def create_widgets(self): 
     self.entry = Entry() 
     self.entry.grid(row = 1, column = 1) 
     Button(text = "b", command = b).grid(row = 1, column = 2) 

    def __init__(self, master = None): 
     ... 
     master.bind("<Return>", self.b) 
+0

Ah, danke! Das hat perfekt funktioniert. Ich wusste nicht wirklich, dass du das kannst, immer noch Tkinter lernst. – FrozenDude101

Verwandte Themen