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