首页 > 解决方案 > 有没有办法通过单独的类将 Python 方法绑定到 Tkinter 小部件?

问题描述

有没有办法通过单独的类将 Python 方法绑定到 Tkinter 小部件?(即,这些方法与 tkinter 小部件位于不同的类中)?

特别是 Checkbutton() 小部件?

例子:

def __init__(self, master):

    self.var = IntVar()    
    c = Checkbutton(master, text="Enable a tab", variable=self.var, command=self.cb)
    c.pack()
    

def cb(self, event)

    print("Variable is", self.var.get())

...对于第二种方法“cb” - 是否可以将它写在与持有 def init (self, master) 构造函数的类不同的类中?

编辑:通过执行以下操作将变量 self.var 传递给 cb 方法:

command=self.cb(self.var)

显然使程序工作不正常。

编辑:问题已得到解答!非常感谢 !

标签: pythontkinter

解决方案


是的,你大约。问题command=self.cb(self.var)是您不能将参数传递给命令中的方法,只能传递方法本身,但您可以使用 lambda 函数解决此问题,例如 in command=lambda: self.cb(self.var)。这是一个可重现的小例子:

import tkinter as tk 

class Printer(object):
    def print_text(self, text):
        print(text)

class Button(tk.Button):
    def __init__(self, parent):
        other = Printer()
        super(Button, self).__init__(parent, text='press', command=lambda: other.print_text('test'))

root = tk.Tk()
Button(root).pack()
root.mainloop()

推荐阅读