1
如何从函数访问top level widget
,该函数用作按钮或菜单的命令?有一种方法可以通过使用command=lambda: f(params)
在此命令功能中添加参数,但我认为它可能更容易。访问Tkinter中的顶级小部件
如何从函数访问top level widget
,该函数用作按钮或菜单的命令?有一种方法可以通过使用command=lambda: f(params)
在此命令功能中添加参数,但我认为它可能更容易。访问Tkinter中的顶级小部件
你可以使用lambda,像你提到的:
command=lambda: f(params)
或者你可以做一个封闭:
def make_callback(params):
def callback():
print(params)
return callback
params = 1,2,3
button = tk.Button(master, text='Boink', command=make_callback(params))
,或者你可以使用一个类,并通过绑定方法。 self
的属性可以包含您必须作为参数传递的信息。
import Tkinter as tk
class SimpleApp(object):
def __init__(self, master, **kwargs):
self.master = master
self.params = (1,2,3)
self.button = tk.Button(master, text='Boink', command=self.boink)
self.button.pack()
def boink(self):
print(self.params)
root = tk.Tk()
app = SimpleApp(root)
root.mainloop()
你的lambda和你的显式def都是闭包。 – abarnert
lambda本身不是一个闭包,因为它不会关闭'params'。 – unutbu
当且仅当在创建函数时'params'处于非全局范围内时''lambda'是一个闭包。 “def”也是如此。尝试用'def command():return f(params)'替换'command = lambda:f(params)',并尝试用'return lambda:f(params)'替换'make_callback'的主体。 – abarnert