Tkinter:将功能分配给按钮时出现KeyError

所以,我有一个相当复杂的程序,我遇到了一个我似乎无法解决的问题。这是我的程序有问题的部分:


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”的内容不是通过按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但由于某种原因它有效。


我该怎么做才能使第一个代码正常工作?


阿波罗的战车
浏览 164回答 2
2回答

一只斗牛犬

当您vars在函数中本地执行时hi,会创建一个新的 dict 对象,这与全局创建的 dict 对象不同。您可以保存对变量的引用并在函数中使用该变量。hiimport tkinter as tkwindow = 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()

蓝山帝景

我需要按下一个按钮来获取名为“enter”的条目的内容。由于我的程序是如何工作的,这个名字,“enter”必须存储在一个变量中,比使用更好的解决方案vars()[variable]是将小部件存储在字典中。的使用以vars()使代码更难理解为代价提供的价值很小。import tkinter as tkwindow = 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python