为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿波罗的战车 2022-11-09 16:54:28
所以,我有一个相当复杂的程序,我遇到了一个我似乎无法解决的问题。这是我的程序有问题的部分:import tkinter as tkwindow = 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 tkwindow = 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”的内容不是通过按钮完成的,而是在程序运行时自动完成的。这不是我想要的,但由于某种原因它有效。我该怎么做才能使第一个代码正常工作?
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

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


查看完整回答
反对 回复 2022-11-09
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

我需要按下一个按钮来获取名为“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()


查看完整回答
反对 回复 2022-11-09
  • 2 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信