鱼C论坛

 找回密码
 立即注册
查看: 26|回复: 3

Tkinter 如何将背景色循环起来 ?

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

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

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

x
  1. from tkinter import *
  2. root=Tk()
  3. a=["fuchsia","lawn","sienna","skyblue"]
  4. f=Button(root,text="元宵节")
  5. f.pack()
  6. y=0
  7. def lxw():
  8.       global y
  9.       f.after(2000*y,lambda y=y : f.config(background=a[y]))
  10.       y=divmod((y+1),len(a))[1]
  11. lxw()
  12. mainloop()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 3 小时前 | 显示全部楼层
Tkinter 如何将背景色循环起来?


首先,您需要定义一个颜色列表,然后使用 after 方法定时更新背景色以实现循环。在您的代码中,变量 a 未定义,且索引更新逻辑有误。以下是修正后的方法:

1. 定义颜色列表,例如 a = ['red', 'green', 'blue']
2. 使用一个索引变量 y 来跟踪当前颜色。
3. 在函数中设置背景色为 a[y],然后更新索引以实现循环。
4. 使用 after(2000, lxw) 固定每2000毫秒调用一次函数,形成循环。

修正后的代码示例:

  1. from tkinter import *

  2. root = Tk()
  3. # 定义颜色列表
  4. a = ['red', 'green', 'blue']
  5. f = Button(root, text="元宵节")
  6. f.pack()

  7. y = 0  # 颜色索引

  8. def lxw():
  9.     global y
  10.     # 设置当前背景色
  11.     f.config(background=a[y])
  12.     # 更新索引,循环使用
  13.     y = (y + 1) % len(a)
  14.     # 2000毫秒后再次调用自身,形成循环
  15.     f.after(2000, lxw)

  16. lxw()  # 启动循环
  17. mainloop()
复制代码


代码说明:
- a 是颜色列表,可以根据需要添加更多颜色。
- y 初始为0,每次调用 lxw 时,按钮背景色更新为 a[y]
- y = (y + 1) % len(a) 确保索引在列表长度内循环。
- after(2000, lxw) 设置每2000毫秒(2秒)执行一次 lxw,实现背景色自动循环变化。

这样,按钮的背景色就会在红色、绿色、蓝色之间每2秒切换一次。您可以根据需要调整颜色列表和时间间隔。

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

使用道具 举报

 楼主| 发表于 3 小时前 | 显示全部楼层
FishC 发表于 2026-3-3 10:06
首先,您需要定义一个颜色列表,然后使用 after 方法定时更新背景色以实现循环。在您的代码中,变量 a  ...


不要改变原有程序的主体结构,即程序中要使用 lambda 匿名函数的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 3 小时前 | 显示全部楼层
dragov 发表于 2026-03-03 10:09
FishC 发表于 2026-3-3 10:06
首先,您需要定义一个 ...


根据您的要求,保持原有程序的主体结构,使用 lambda 匿名函数。以下是修正后的代码:


  1. from tkinter import *
  2. root=Tk()
  3. # 定义颜色列表
  4. a = ['red', 'green', 'blue']
  5. f=Button(root,text="元宵节")
  6. f.pack()
  7. y=0

  8. def lxw():
  9.       global y
  10.       # 使用 lambda 匿名函数设置背景色
  11.       f.after(2000, lambda: f.config(background=a[y]))
  12.       # 更新索引,循环使用
  13.       y = (y + 1) % len(a)
  14.       # 再次调用自身,形成循环
  15.       f.after(2000, lxw)

  16. lxw()
  17. mainloop()
复制代码


代码说明:
1. 变量 a 定义为颜色列表:['red', 'green', 'blue']
2. 使用 lambda 匿名函数设置按钮背景色:f.config(background=a[y])
3. 更新索引 y 的逻辑改为:y = (y + 1) % len(a),确保循环
4. 每 2000 毫秒调用一次 lxw 函数,形成循环

这样,程序会每 2 秒自动循环切换按钮的背景色。您可以根据需要修改颜色列表和时间间隔。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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