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