dragov 发表于 2025-8-23 10:00:28

Tkinter 按钮底色 红-绿 交替闪烁,怎么实现 ?



from tkinter import *
root=Tk()
root.geometry("234x123")
root.option_add("*width","18")
root.option_add("*height","3")
b=Button(root,text="大暴雨",background="red")
b.pack(expand=True)
def a():
      b.config(background="green")
root.after(3000,a)
mainloop()

每隔3s ,红-绿-红-绿-红.......

FishC 发表于 2025-8-23 10:02:10

您好!要实现 Tkinter 按钮背景颜色在红色和绿色之间交替闪烁,每隔 3 秒切换一次,您需要修改代码,使用一个函数来切换颜色并递归调用自身。以下是修改后的代码:


from tkinter import *

root = Tk()
root.geometry("234x123")
root.option_add("*width", "18")
root.option_add("*height", "3")
b = Button(root, text="大暴雨", background="red")
b.pack(expand=True)

def toggle_color():
    current_color = b.cget("background")
    if current_color == "red":
      new_color = "green"
    else:
      new_color = "red"
    b.config(background=new_color)
    root.after(3000, toggle_color)# 每隔3秒再次调用

root.after(3000, toggle_color)# 3秒后开始第一次切换

mainloop()


关键点:
- 使用 b.cget("background") 获取当前背景颜色。
- 根据当前颜色决定下一个颜色(红变绿,绿变红)。
- 使用 root.after(3000, toggle_color) 来每隔 3 秒调用函数,实现循环闪烁。

这样,按钮会从初始红色开始,每隔 3 秒在红色和绿色之间交替切换。如果您需要调整闪烁间隔,可以修改 after 方法中的时间参数(单位是毫秒)。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

某一个“天” 发表于 2025-8-23 10:54:08

from tkinter import *
root=Tk()
root.geometry("234x123")
root.option_add("*width","18")
root.option_add("*height","3")
b=Button(root,text="大暴雨",background="red")
b.pack(expand=True)
bg=["green", "red"]
n=0
def a():
      b.config(background=bg)
      n= not n
root.after(3000,a)
mainloop()

某一个“天” 发表于 2025-8-23 10:54:46

另一种思路,ai 的也行

ydwb 发表于 2025-8-23 13:44:25

from tkinter import *
root=Tk()
root.geometry("234x123")
root.option_add("*width","18")
root.option_add("*height","3")
b=Button(root,text="大暴雨",background="red")
b.pack(expand=True)
is_red = True
def a():
      global is_red
      if is_red:
            b.config(bg="green")
            is_red = False
      else:
            b.config(bg="red")
            is_red = True

      root.after(3000, a)

a()
mainloop()

dragov 发表于 2025-8-23 19:37:06

某一个“天” 发表于 2025-8-23 10:54




报错呀!UnboundLocalError: cannot access local variable 'n' where it is not associated with a value

dragov 发表于 2025-8-23 19:45:43

本帖最后由 dragov 于 2025-8-23 19:47 编辑

ydwb 发表于 2025-8-23 13:44
from tkinter import *
root=Tk()
root.geometry("234x123")




嗯,这个程序还不错的 !

dragov 发表于 2025-8-23 19:50:21

某一个“天” 发表于 2025-8-23 10:54




您给的这个程序需要进行修改,我是这样修改的,然后就行了.

from tkinter import *
root=Tk()
root.geometry("234x123")
root.option_add("*width","18")
root.option_add("*height","3")
b=Button(root,text="大暴雨",background="red")
b.pack(expand=True)
bg=["green", "red"]
n=0
def a():
      global n
      b.config(background=bg)
      n= not n
root.after(3000,a)
mainloop()

某一个“天” 发表于 2025-8-23 21:21:37

dragov 发表于 2025-8-23 19:50
您给的这个程序需要进行修改,我是这样修改的,然后就行了.

哈哈哈,忘了global

某一个“天” 发表于 2025-8-23 21:22:12

dragov 发表于 2025-8-23 19:50
您给的这个程序需要进行修改,我是这样修改的,然后就行了.

我直接脑测的,抱歉了
页: [1]
查看完整版本: Tkinter 按钮底色 红-绿 交替闪烁,怎么实现 ?