You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:57