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

Tkinter点击按钮更改自身颜色 批量生成后点击仅修改最后一个按钮问题求解

问题根源

循环创建按钮时反复覆盖了全局变量bingoButton,所有按钮绑定的colourChange函数调用时,读取的都是循环结束后最终指向最后一个按钮的bingoButton变量,因此只会修改最后一个按钮的样式。

修复方案

修改回调函数支持接收按钮实例作为参数,创建按钮时通过lambda的默认参数绑定当前生成的按钮实例,保证每个按钮触发回调时传入的是自身实例。lambda的默认参数会在定义时完成求值,因此每次循环生成的按钮都会被绑定到对应lambda的默认参数中,不会被后续循环的变量覆盖。

修改后的完整代码如下:

# 回调函数新增接收按钮参数
def colourChange(btn):
    btn.configure(bg="blue")

while whatever < 25:
    whatever += 1
    bingoButton = tk.Button(window,
                              text=whatever,
                              foreground="white",
                              background="black",
                              font=myFont,
                              # 通过lambda默认参数绑定当前按钮实例
                              command=lambda btn=bingoButton: colourChange(btn)
                              )
    bingoButton.config(height=3, width=5)
    bingoButton.grid(column=gridPosX,row=gridPosY)
    gridPosX += 1
    if gridPosX == 5:
        gridPosX = 0
        gridPosY += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:08