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
相关产品推荐
相关产品推荐

