因此,我的程序相当复杂,并且遇到了我似乎无法解决的问题。 这是我程序中有问题的部分:
import tkinter as tk
window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()
def hi():
text = vars()[variable].get()
button = tk.Button(text = "Click", command = hi)
button.pack()
我需要通过按一下按钮获取名为“ enter”的条目的内容。由于我的程序是如何工作的,因此必须将这个名称“ enter”存储在一个变量中,在这里我将其称为“ variable”。 发生的是,当我按下按钮时,出现了KeyError。
更奇怪的是,当我执行以下操作时,该程序实际上可以正常工作:
import tkinter as tk
window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()
text = vars()[variable].get()
button = tk.Button(text = "Click")
button.pack()
这里获取“输入”的内容不是用按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但是由于某种原因它可以工作。
如何使第一个代码正常工作?
答案 0 :(得分:0)
在vars
函数中本地执行hi
时,将创建一个新的dict对象,该对象不同于全局创建的dict对象。
您可以保存对变量的引用,并在hi
函数中使用该变量。
import tkinter as tk
window = tk.Tk()
variable = "enter"
vars()[variable] = tk.Entry()
vars()[variable].insert(0, "hello")
vars()[variable].pack()
d = vars()
def hi():
text = d[variable].get()
button = tk.Button(text="Click", command=hi)
button.pack()
window.mainloop()
答案 1 :(得分:0)
我需要通过按一下按钮获取名为“ enter”的条目的内容。由于我的程序是如何工作的,因此必须将这个名称“ enter”存储在变量中,
比使用vars()[variable]
更好的解决方案是将小部件存储在字典中。 vars()
的使用几乎没有价值,以使代码更难以理解为代价。
import tkinter as tk
window = tk.Tk()
variable = "enter"
widgets = {}
widgets[variable] = tk.Entry()
widgets[variable].insert(0, "hello")
widgets[variable].pack()
def hi():
text = widgets[variable].get()
print(text)
button = tk.Button(text = "Click", command = hi)
button.pack()