如何实现tkinter按钮每次点击循环切换颜色,修复点击仅变紫色的问题
问题原因
- 你编写的
chgcolor函数内部使用了遍历全颜色列表的for循环,每次点击按钮时,程序会在极短时间内依次将按钮背景设置为红、蓝、紫三种颜色,人眼无法捕捉中间的过渡状态,最终只会显示循环结束后的最后一个颜色紫色。
解决方法
- 我们需要新增一个变量记录当前显示的颜色索引,每次点击按钮时仅切换到下一个对应颜色,索引超出列表长度时自动重置为0即可实现循环效果,修改后的代码如下:
from tkinter import * window = Tk() color = ['red','blue','purple'] # 记录当前使用的颜色索引,初始为0对应第一个红色 current_color_index = 0 def chgcolor(): global current_color_index # 索引自增1后对列表长度取模,实现到末尾自动回到开头的循环 current_color_index = (current_color_index + 1) % len(color) # 单次仅修改为当前索引对应的颜色 mybutton.config(bg=color[current_color_index]) window.title('my first python gui') # 初始化按钮背景为第一个颜色红色 mybutton = Button(window, text='change color', command=chgcolor, bg=color[0]) mybutton.pack() window.mainloop()
- 代码中
% len(color)的取模运算可以自动处理索引越界问题,当索引增加到和颜色列表长度相等时,取模结果会回到0,不需要额外写条件判断。
内容的提问来源于stack exchange,提问作者Yi Zhe Tan
相关产品推荐
相关产品推荐

