【问题标题】:Tkinter binding to inside a functionTkinter 绑定到函数内部
【发布时间】:2017-03-01 01:16:32
【问题描述】:

目前这是我的代码:

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

到目前为止,它调用了 a,但是将 self.a 替换为 self.b 以使其调用 b 会引发 AttributeError: 'Application' object has no attribute 'b' and with just b returns a NameError: 'b' is未定义。

那么我怎样才能像按钮一样进行绑定调用?

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    那么我怎样才能像按钮一样进行绑定调用b呢?

    在我看来,最好的解决方案是使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)
    

    【讨论】:

    • 啊,谢谢!这非常有效。我实际上不知道你能做到这一点,还在学习 tkinter。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多