如何修复Tkinter中control variable get()方法引发的KeyError
问题分析与解决
1. 触发KeyError: ''的核心原因
你代码里的按钮定义有个关键错误:
btn = ttk.Button(window, text='SHOW', command=showResult())
这里的command=showResult()是直接调用了函数,而不是把函数作为点击回调传递给按钮。程序一启动就会执行showResult(),此时用户还没在entry1输入任何内容,var的默认值是空字符串'',而你的字典my_Dict里没有这个键,自然就抛出了KeyError。
2. 修复方法
把按钮的command参数改成传递函数本身(去掉括号):
btn = ttk.Button(window, text='SHOW', command=showResult)
3. 潜在的其他问题(建议修复)
你的代码里entry1和entry2的赋值方式有问题:
entry1 = ttk.Entry(window, textvariable=var).grid(row=0, column=1)
因为grid()方法返回的是None,所以entry1实际上是None,如果之后需要操作这个Entry组件(比如设置焦点、修改样式)就会报错。正确的写法是分开组件创建和布局:
entry1 = ttk.Entry(window, textvariable=var) entry1.grid(row=0, column=1) # entry2同理 entry2 = ttk.Entry(window, textvariable=result) entry2.grid(row=2, column=1)
4. 完整修正后的代码
import tkinter as tk from tkinter import ttk window = tk.Tk() window.geometry('300x300') window.title('test') def showResult(): x = var.get() message = list(my_Dict[x].values()) result.set(str(message)) my_Dict= {'A': {'aa': 1}, 'B': {'bb': 2}, 'C': {'cc': 3}} label = ttk.Label(window, text='Enter here').grid(row=0, column=0) var = tk.StringVar() entry1 = ttk.Entry(window, textvariable=var) entry1.grid(row=0, column=1) label = ttk.Label(window, text='Result here').grid(row=2, column=0) result = tk.StringVar() entry2 = ttk.Entry(window, textvariable=result) entry2.grid(row=2, column=1) btn = ttk.Button(window, text='SHOW', command=showResult) btn.grid(row=1, column=0) window.mainloop()
现在运行代码,在entry1输入"A"并点击SHOW按钮,entry2就会显示[1],完全符合你的预期。
内容的提问来源于stack exchange,提问作者Smith788483
相关产品推荐
相关产品推荐

