2 回答
TA贡献1824条经验 获得超6个赞
不,外部函数无法访问函数中定义的局部变量。
尽管如此,有几种方法可以解决您遇到的问题。您可以在__init__实例变量(的属性self)中定义变量,并确保您的外部函数可以访问正确的实例(可能在全局变量中)。
或者您可以在函数内定义一个__init__函数。这样的闭包可以毫无问题地访问外部命名空间中定义的变量。在您的特定实例中,您甚至可以使闭包变得非常小,使用参数lambda调用“真正的”外部函数:
class MainApp(tk.Tk):
def test(test_entry):
a = test_entry.get()
print(a)
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
test_entry = tk.Entry(self)
test_entry.pack()
submit_button = tk.Button(self, text="Submit", command=lambda: MyApp.test(test_entry))
submit_button.pack()
该表达式lambda: MyApp.test(test_entry)定义了一个未命名的函数,该函数保持test_entry在__init__方法的命名空间中定义的。当 lambda 函数被调用时,它会将该值传递给该test函数。您也可以将整个test定义移动到__init__方法中,然后直接调用它,而无需使用lambda,但这通常很丑陋,因为它涉及很多深度缩进。
添加回答
举报