2017-02-28 42 views
0

目前,这是我的代码:Tkinter的一个函数内部结合

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() 

到目前为止,它调用,但self.b更换self.a使它B键,而不是带来了AttributeError错误:“应用程序”对象没有属性'b',只有b返回一个NameError:'b'没有被定义。

那么我怎样才能使绑定调用像按钮?

回答

0

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

在我看来,最好的解决办法是让b类的适当的方法,而不是一个嵌套函数。让你的小部件适当的属性以及代码变得更容易编写:

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

啊,谢谢!这工作完美。我实际上并不知道你能做到这一点,仍然在学习tkinter。 – FrozenDude101