Tkinter:将功能分配给按钮时出现 KeyError
Tkinter: KeyError when assigning function to a button
所以,我的程序相当复杂,我 运行 遇到了一个我似乎无法解决的问题。
这是我程序中有问题的部分:
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()
这里获取"enter"的内容不是通过按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但出于某种原因它有效。
我该怎么做才能使第一个代码正常工作?
当您在 hi
函数中本地执行 vars
时,将创建一个新的字典对象,这与全局创建的字典对象不同。
您可以保存对变量的引用并在 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()
I need to get the content of the entry called "enter" with the press of a button. Because of how my program works, this name, "enter" must be stored in a variable,
比使用 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()
所以,我的程序相当复杂,我 运行 遇到了一个我似乎无法解决的问题。 这是我程序中有问题的部分:
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()
这里获取"enter"的内容不是通过按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但出于某种原因它有效。
我该怎么做才能使第一个代码正常工作?
当您在 hi
函数中本地执行 vars
时,将创建一个新的字典对象,这与全局创建的字典对象不同。
您可以保存对变量的引用并在 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()
I need to get the content of the entry called "enter" with the press of a button. Because of how my program works, this name, "enter" must be stored in a variable,
比使用 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()