为了账号安全,请及时绑定邮箱和手机立即绑定

使用 _init_ 中的变量

使用 _init_ 中的变量

绝地无双 2021-11-16 09:57:41
这是我的代码的一部分。基本上,我想访问输入框中给出的值,它是 def init的一部分。有没有不使用全局变量的方法来解决这个问题?此外,它以这种方式设置,以便可以在我的整个程序中使用该变量。谢谢。import tkinter as tkclass MainApp(tk.Tk):def test():    a = __init__.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=MyApp.test)    submit_button.pack()if __name__ == "__main__":    app = MainApp()    app.mainloop()
查看完整描述

2 回答

?
慕妹3242003

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,但这通常很丑陋,因为它涉及很多深度缩进。


查看完整回答
反对 回复 2021-11-16
?
慕神8447489

TA贡献1780条经验 获得超1个赞

我不确定我是否正确理解你 tbh

您是否考虑过使用它?
self.__test_entry = tk.Entry(self)


查看完整回答
反对 回复 2021-11-16
  • 2 回答
  • 0 关注
  • 289 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信