让最后一个按钮的底色交替变换?
from tkinter import *import random
root=Tk()
root.geometry("444x555")
a=f"#{random.randint(0x456ABC,0xABC456):06x}"
root.config(background=a)
p=[{"name":"A","hue":"hotpink"},
{"name":"B","hue":"mediumorchid"},
{"name":"C","hue":"lightcoral"},
{"name":"D","hue":"chocolate"},
{"name":"E","hue":"crimson"}]
r=True
def n():
global r,m
if r :
m.config(background="#A0B0C0")
f=False
else :
m.config(background="#0A0B0C")
f=True
m.after(2026,n)
m=list()
for i in range(len(p)) :
q=Button(root,text=p["name"],foreground=p["hue"],pady=23,width=23)
q.pack(expand=True)
m.append(q)
m.config(command=n)
mainloop()
按钮【E】的底色,如何动起来?
鱼油您好!您的代码有几个需要注意的地方:
- 变量 p 没有定义,导致循环无法运行。
- m 是列表,不能直接调用 .config() 方法。
- 函数 n() 中 f 未声明全局,且 r 始终为 True,颜色无法交替。
要让最后一个按钮的底色交替变换,可以参考下面的代码:
from tkinter import *
root = Tk()
root.geometry("444x555")
root.config(background="#AABBCC")# 简化背景颜色示例
buttons_text = ["A", "B", "C", "D", "E"]
buttons = []
for text in buttons_text:
btn = Button(root, text=text, pady=23, width=23)
btn.pack(expand=True)
buttons.append(btn)
last_btn = buttons[-1]# 最后一个按钮
use_color1 = True
def toggle():
global use_color1
if use_color1:
last_btn.config(background="#A0B0C0")
else:
last_btn.config(background="#0A0B0C")
use_color1 = not use_color1
root.after(2026, toggle)
root.after(2026, toggle)# 启动定时器
root.mainloop()
解释一下:
1. 先创建五个按钮,用列表 buttons 保存。
2. 取出最后一个按钮 last_btn = buttons[-1]。
3. 定义 toggle() 函数,利用 use_color1 布尔变量切换两种颜色。
4. 使用 root.after(2026, toggle) 让程序每 2.026 秒自动调用一次切换函数,实现颜色交替。
这样就实现了按钮【E】的底色动起来的效果。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2026-5-28 09:31
鱼油您好!您的代码有几个需要注意的地方:
- 变量 p 没有定义,导致循环无法运行。
要是使第一个按钮自动变换颜色呢 ? dragov 发表于 2026-05-28 09:51
FishC 发表于 2026-5-28 09:31
鱼油您好!您的代码有 ...
如果要让第一个按钮自动变换颜色,只需把代码中的 last_btn = buttons 改为 first_btn = buttons 即可。
修改后的关键部分:
first_btn = buttons
def toggle():
global use_color1
if use_color1:
first_btn.config(background="#A0B0C0")
else:
first_btn.config(background="#0A0B0C")
use_color1 = not use_color1
root.after(2026, toggle)
这样,按钮【A】的底色就会每 2.026 秒自动交替变换了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 from tkinter import *
import random
root=Tk()
root.geometry("444x555")
a=f"#{random.randint(0x456ABC,0xABC456):06x}"
root.config(background=a)
p=[{"name":"A","hue":"hotpink"},
{"name":"B","hue":"mediumorchid"},
{"name":"C","hue":"lightcoral"},
{"name":"D","hue":"chocolate"},
{"name":"E","hue":"crimson"}]
r=True
def n():
global r
if r:
m.config(background="#A0B0C0")
r=False
else:
m.config(background="#0A0B0C")
r=True
m.after(200,n)
m=[]
for i in p:
q=Button(root,text=i["name"],foreground=i["hue"],pady=23,width=23)
q.pack(expand=True)
m.append(q)
n()
mainloop() 解决了吗?具体是哪个课程里面的内容? 我夏天的到来 发表于 2026-6-9 14:31
解决了吗?具体是哪个课程里面的内容?
这是《Tkinter 框架设计》课程中的内容! dragov 发表于 2026-6-10 11:56
这是《Tkinter 框架设计》课程中的内容!
应该还没看到那里。
页:
[1]