dragov 发表于 2026-5-4 09:16:47

按 钮 底 色 自 动 变 换 3 次 颜 色 ?

from tkinter import *
import random
root=Tk()
b=Button(root,text="天上的星星")
b.pack()
def mtx():
      for _ in range(3):
                b.config(background=f"#{random.randint(0,0x459041):06x}")
mtx()
mainloop()

如何实现按钮底色自动变换3次颜色?

FishC 发表于 2026-5-4 09:17:04

你的代码中 mtx() 函数在循环里瞬间执行了三次,由于程序执行速度极快,按钮颜色会直接跳到最后一次的结果,你看不到中间的变化过程。要实现“自动变换三次颜色(每次有延迟)”,需要使用 tkinter 的 after 方法定时改变颜色。

下面是一个修改后的例子,窗口显示后按钮背景色会每隔 500 毫秒自动变换一次,共变换 3 次:


from tkinter import *
import random

root = Tk()
b = Button(root, text="天上的星星")
b.pack()

count = 0# 记录已变换的次数

def change_color():
    global count
    if count < 3:
      # 生成随机颜色(保留你原来的范围)
      color = f"#{random.randint(0, 0x459041):06x}"
      b.config(background=color)
      count += 1
      # 500毫秒后再次调用本函数
      root.after(500, change_color)

# 窗口显示后稍等100ms启动变色
root.after(100, change_color)
root.mainloop()


**解释:**

[*] root.after(延迟毫秒, 函数名) 会在指定时间后自动调用函数,且不阻塞界面。
[*] 每次调用 change_color 时,判断是否已变换了 3 次,若未达到则设置新颜色并计数,然后安排下一次调用。
[*] 这样按钮颜色就会按次序变化,你就能看到每次的闪烁效果。

注意:不要使用 time.sleep(),否则界面会卡死。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

学习编程中的Ben 发表于 2026-5-4 21:03:09

from tkinter import *
root=Tk()
m=PhotoImage(file="e://A.png")
n=PhotoImage(file="e://B.png")
b=Button(root,
         relief="ridge",
         borderwidth=11)
b.pack()
def a():
      if b.cget("image") == m :
                b.config(image=n)
      else :
                b.config(image=m)
      b.after(3000,a)
times=3
while times != 0:
    a()
    sleep(2000)
    times -= 1
mainloop()同你的另一个问题

dragov 发表于 2026-5-6 17:01:03

学习编程中的Ben 发表于 2026-5-4 21:03
同你的另一个问题



运行,报错的!

学习编程中的Ben 发表于 2026-5-10 09:16:54

dragov 发表于 2026-5-6 17:01
运行,报错的!

你再稍微调一下吧,反正我的思路是对的
太久没做python项目
我本地都没配置运行环境汗颜了
页: [1]
查看完整版本: 按 钮 底 色 自 动 变 换 3 次 颜 色 ?