有没有办法通过单独的类将Python方法绑定到Tkinter小部件?
有没有办法通过单独的类将Python方法绑定到Tkinter小部件?(即,这些方法与tkinter小部件位于不同的类中) 特别是Checkbutton()小部件 例如:有没有办法通过单独的类将Python方法绑定到Tkinter小部件?,python,tkinter,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 __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”——是否可以将它写在与持有definit(self,master)构造函数的类不同的类中
编辑:通过以下操作将变量self.var传递到cb方法:
command=self.cb(self.var)
使程序显然无法正常工作
编辑:问题已经回答了!多谢各位 是的,您可以这样做。
command=self.cb(self.var)
的问题是,您不能将参数传递给command中的方法,只能传递给方法本身,但是您可以使用lambda函数来解决这个问题,就像在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()
是的,通过另一个类的实例。但是如果您想访问这个类的实例变量,您需要将
self
传递给另一个类的回调。acw1668-您能通过一个代码示例演示一下吗?我想我在上面的编辑说明中提到了这一点。当我实例化一个对象并试图通过绑定的tkinter方法将该类的实例变量传递到该对象时,程序无法工作。