鱼C论坛

 找回密码
 立即注册
查看: 229|回复: 13

[已解决]Tkinter 如何将背景色循环起来 ?

[复制链接]
发表于 2026-3-3 10:05:30 | 显示全部楼层 |阅读模式

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

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

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()
复制代码


最佳答案
昨天 18:53
dragov 发表于 2026-3-22 18:00
您提供的这种方法,是大众的方法哈。

您想怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-3-3 10:06:17 | 显示全部楼层
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
回复 支持 反对

使用道具 举报

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


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

使用道具 举报

发表于 2026-3-3 10:12:25 | 显示全部楼层
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
回复 支持 反对

使用道具 举报

发表于 2026-3-3 22:31:31 | 显示全部楼层
很好的思路,不错,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-4 17:39:07 | 显示全部楼层
似乎每次调用时,程序用的其实是同一个 y。
不如把 `lambda y=y : f.config(background=a[y])` 替换为`lxw`?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-6 00:28:10 | 显示全部楼层
我记得缺省时参数不会更新
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-3-6 07:44:43 | 显示全部楼层
某一个“天” 发表于 2026-3-6 00:28
我记得缺省时参数不会更新

好似目前无解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-14 21:53:55 | 显示全部楼层

我的回答呢,在6楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-3-15 21:05:07 | 显示全部楼层
player-none 发表于 2026-3-14 21:53
我的回答呢,在6楼


谢谢您的回复,但是没有满足要求。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2026-3-15 21:38:47 | 显示全部楼层
dragov 发表于 2026-3-15 21:05
谢谢您的回复,但是没有满足要求。
  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.config(background=a[y])
  10.       root.after(2000,lxw)
  11.       y=(y+1)%len(a) #等效命令,但更具备可读性
  12. lxw()
  13. mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 15:59 | 显示全部楼层
dragov 发表于 2026-3-15 21:05
谢谢您的回复,但是没有满足要求。

11#
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 18:00 From FishC Mobile | 显示全部楼层
player-none 发表于 2026-3-22 15:59
11#

您提供的这种方法,是大众的方法哈。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 昨天 18:53 | 显示全部楼层    本楼为最佳答案   
dragov 发表于 2026-3-22 18:00
您提供的这种方法,是大众的方法哈。

您想怎么改?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-23 17:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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