鱼C论坛

 找回密码
 立即注册
查看: 34|回复: 4

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

[复制链接]
发表于 2026-5-4 09:16:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. from tkinter import *
  2. import random
  3. root=Tk()
  4. b=Button(root,text="天上的星星")
  5. b.pack()
  6. def mtx():
  7.         for _ in range(3):
  8.                 b.config(background=f"#{random.randint(0,0x459041):06x}")
  9. mtx()
  10. mainloop()
复制代码


如  何  实  现  按  钮  底  色  自  动  变  换  3  次  颜  色  ?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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


  1. from tkinter import *
  2. import random

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

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

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

  16. # 窗口显示后稍等100ms启动变色
  17. root.after(100, change_color)
  18. root.mainloop()
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-4 21:03:09 | 显示全部楼层
  1. from tkinter import *
  2. root=Tk()
  3. m=PhotoImage(file="e://A.png")
  4. n=PhotoImage(file="e://B.png")
  5. b=Button(root,
  6.          relief="ridge",
  7.          borderwidth=11)
  8. b.pack()
  9. def a():
  10.         if b.cget("image") == m :
  11.                 b.config(image=n)
  12.         else :
  13.                 b.config(image=m)
  14.         b.after(3000,a)
  15. times=3
  16. while times != 0:
  17.     a()
  18.     sleep(2000)
  19.     times -= 1
  20. mainloop()
复制代码
同你的另一个问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-5-6 17:01:03 | 显示全部楼层


运行,报错的!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-5-10 09:16:54 | 显示全部楼层
dragov 发表于 2026-5-6 17:01
运行,报错的!

你再稍微调一下吧,反正我的思路是对的
太久没做python项目
我本地都没配置运行环境汗颜了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-5-25 06:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表