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

Tkinter添加command参数后出现KeyError: 0错误求解决

解决Tkinter中KeyError: 0的问题

问题原因

你遇到的KeyError: 0是因为**command=click(name)会在创建Button时立即执行click函数**,而此时button[name]还没有被添加到字典中(button[name] = Button(...)是下一行才执行的代码)。当click函数试图访问button[number]时,这个键还不存在,所以抛出了KeyError。

解决方案

使用lambda来延迟函数的执行,只有当按钮被点击时才会调用click函数。修改command参数的写法:

from tkinter import *
window = Tk ()
window.title(" ")
button = {}
name = -1

def click(number):
    button[number].config(bg="gray")
    print(number)

for x in range(15):
    for y in range(15):
        name = name + 1
        # 使用lambda绑定参数,注意要把name设为默认参数避免闭包问题
        button[name] = Button(window, command=lambda num=name: click(num), bg="white")
        button[name].config(height=2, width=4)
        button[name].grid(column=x, row=y)

window.mainloop()

补充说明

这里给lambda的num设置默认参数num=name是为了避免闭包陷阱——如果直接写lambda: click(name),所有按钮的command都会引用最后一次循环的name值,点击任何按钮都会触发最后一个按钮的操作。通过默认参数的方式,会把当前循环的name值绑定到lambda内部,确保每个按钮点击时传递的是正确的编号。

内容的提问来源于stack exchange,提问作者Sebastian Bardoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:01:05