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