dragov 发表于 2026-8-7 19:30:19

Tkinter 想让第2个按钮颜色交替变换

本帖最后由 dragov 于 2026-8-7 19:32 编辑

from tkinter import *
root=Tk()
o=["东","南","西","北"]
p=["red","blue"]
def gyl():
      z=Toplevel(root)
      y=list()
      for i in range(len(o)):
            x=Button(z,text=o)
            x.pack()
            y.append(x)
      z.transient(root)
      z.grab_set()
      y[-1].focus_set()
      r=True
      def t():
            global r
            if r:
                  y.config(background=p)
                  r=False
            else :
                  y.config(background=p)
                  r=True
            y.after(2000,t)
      root.after(5000,t)
Button(root,text="大暴雨",command=gyl).pack()
mainloop()



为什么提示 r 没有被定义呢 ?

FishC 发表于 2026-8-7 19:30:30

鱼油你好!你的代码有几个问题:


[*]o 和 p 没有定义,导致 len(o) 报错。
[*]y 是列表,不能直接调用 config 或 focus_set。
[*]r 变量作用域混乱,global r 引用了不存在的全局变量。
[*]你想让“第2个按钮”交替变色,但代码里没有明确创建第二个按钮。


下面是一个简单易懂的修正版,实现两个按钮,第二个按钮每2秒切换一次背景色:


from tkinter import *

root = Tk()

# 第一个按钮
Button(root, text="按钮1").pack()

# 第二个按钮,准备交替变色
btn2 = Button(root, text="按钮2", bg="lightblue")
btn2.pack()

# 控制颜色交替的状态
flag = True

def toggle_color():
    global flag
    if flag:
      btn2.config(bg="orange")
      flag = False
    else:
      btn2.config(bg="lightblue")
      flag = True
    # 每隔2000毫秒(2秒)再次调用自己
    btn2.after(2000, toggle_color)

# 启动交替
btn2.after(2000, toggle_color)

mainloop()


这段代码中,btn2 就是第二个按钮,toggle_color 函数负责切换颜色,并通过 after 实现循环定时。你可以直接运行试试看!

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

smallwh 发表于 2026-8-9 21:45:47

from tkinter import *

root = Tk()
directions = ["东","南","西","北"]
color = ["red","blue"]

def gyl():
    window = Toplevel(root)
    direction_buttons = list()
    for i in directions:
      button = Button(window,text=i)
      button.pack()
      direction_buttons.append(button)
    window.transient(root)
    window.grab_set()
    direction_buttons[-1].focus_set()
    flag = True
   
    def t():
      nonlocal flag
      if flag:
            direction_buttons.config(background=color)
            flag = False
      else:
            direction_buttons.config(background=color)
            flag = True
      direction_buttons.after(2000,t)
   
    root.after(5000,t)
   
Button(root,text="大暴雨",command=gyl).pack()
mainloop()
核心错误:你的变量 r(即改后的 flag)不是全局变量,而是定义在一个函数内的局部变量
同时优化了你的变量名和 for 循环逻辑。(写一个有意义的变量名很重要!如果写不出英文变量名请使用汉语拼音。请不要o、p、r、t、x、y、z...排列)
页: [1]
查看完整版本: Tkinter 想让第2个按钮颜色交替变换