猿问

使用 _init_ 中的变量

这是我的代码的一部分。基本上,我想访问输入框中给出的值,它是 def init的一部分。有没有不使用全局变量的方法来解决这个问题?此外,它以这种方式设置,以便可以在我的整个程序中使用该变量。谢谢。


import tkinter as tk


class 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()


绝地无双
浏览 290回答 2
2回答

慕妹3242003

不,外部函数无法访问函数中定义的局部变量。尽管如此,有几种方法可以解决您遇到的问题。您可以在__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,但这通常很丑陋,因为它涉及很多深度缩进。

慕神8447489

我不确定我是否正确理解你 tbh您是否考虑过使用它?self.__test_entry = tk.Entry(self)
随时随地看视频慕课网APP

相关分类

Python
我要回答