使用_init_中的变量

时间:2019-02-21 22:01:21

标签: python python-3.x tkinter

这是我代码中的一部分。基本上,我想访问输入框中给出的值,该输入框是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()

2 个答案:

答案 0 :(得分:2)

否,外部函数无法访问函数中定义的局部变量。

有多种方法可以解决您遇到的问题。您可以在 for (int i = 0; i < arr.length(); i++) { JSONObject jsonPart = arr.getJSONObject(i); partitemap.put(i, new Partita(jsonPart.getString("HomeTeam"), jsonPart.getString("AwayTeam"), jsonPart.getString("Date"), jsonPart.getInt("FTHG"), jsonPart.getInt("FTAG"), jsonPart.getString("FTR") ) ); Log.d("tag", partitemap.get(i).HT); } 实例变量(__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。调用lambda函数时,该值将传递给__init__函数。您还可以将整个test定义移到test方法中,然后直接调用它,而无需使用__init__,但这通常很丑陋,因为它涉及许多深层缩进。

答案 1 :(得分:0)

我不确定我是否正确理解您的情况

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