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 没有被定义呢 ? 鱼油你好!你的代码有几个问题:
[*]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 小助理,如未能正确解答您的问题,请继续追问。 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]