dragov 发表于 2026-5-28 09:31:39

让最后一个按钮的底色交替变换?

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】的底色,如何动起来?

FishC 发表于 2026-5-28 09:31:56

鱼油您好!您的代码有几个需要注意的地方:

- 变量 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 小助理,如未能正确解答您的问题,请继续追问。

dragov 发表于 2026-5-28 09:51:39

FishC 发表于 2026-5-28 09:31
鱼油您好!您的代码有几个需要注意的地方:

- 变量 p 没有定义,导致循环无法运行。


要是使第一个按钮自动变换颜色呢 ?

FishC 发表于 2026-5-28 09:51:46

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 小助理,如未能正确解答您的问题,请继续追问。

尉尉的可乐 发表于 前天 11:21

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()

我夏天的到来 发表于 前天 14:31

解决了吗?具体是哪个课程里面的内容?

dragov 发表于 昨天 11:56

我夏天的到来 发表于 2026-6-9 14:31
解决了吗?具体是哪个课程里面的内容?



这是《Tkinter 框架设计》课程中的内容!

我夏天的到来 发表于 昨天 14:30

dragov 发表于 2026-6-10 11:56
这是《Tkinter 框架设计》课程中的内容!

应该还没看到那里。
页: [1]
查看完整版本: 让最后一个按钮的底色交替变换?