Python矩形彩色动画
我怎样才能制作第三个按钮,将矩形从灰色一个接一个地变成红色。示例:矩形1亮起,然后等待一秒钟,然后矩形2亮起。我试着在每一个w.create_矩形之间放置time.sleep,但这不起作用。我该怎么做,请帮帮我Python矩形彩色动画,python,tkinter,Python,Tkinter,我怎样才能制作第三个按钮,将矩形从灰色一个接一个地变成红色。示例:矩形1亮起,然后等待一秒钟,然后矩形2亮起。我试着在每一个w.create_矩形之间放置time.sleep,但这不起作用。我该怎么做,请帮帮我 import time master = Tk() canvas_width = 280 canvas_height = 50 w = Canvas(master, width=canvas_width, height=canvas_height) w.pack() w.create
import time
master = Tk()
canvas_width = 280
canvas_height = 50
w = Canvas(master, width=canvas_width, height=canvas_height)
w.pack()
w.create_rectangle(0, 0, 25, 25, fill="grey")
w.create_rectangle(25, 0, 50, 25, fill="grey")
w.create_rectangle(50, 0, 75, 25, fill="grey")
w.create_rectangle(75, 0, 100, 25, fill="grey")
w.create_rectangle(100, 0, 125, 25, fill="grey")
w.create_rectangle(125, 0, 150, 25, fill="grey")
w.create_rectangle(150, 0, 175, 25, fill="grey")
w.create_rectangle(175, 0, 200, 25, fill="grey")
w.create_rectangle(200, 0, 225, 25, fill="grey")
w.create_rectangle(225, 0, 250, 25, fill="grey")
def uno():
w.create_rectangle(0, 0, 25, 25, fill="red")
w.create_rectangle(25, 0, 50, 25, fill="red")
w.create_rectangle(50, 0, 75, 25, fill="red")
w.create_rectangle(75, 0, 100, 25, fill="red")
w.create_rectangle(100, 0, 125, 25, fill="red")
w.create_rectangle(125, 0, 150, 25, fill="red")
w.create_rectangle(150, 0, 175, 25, fill="red")
w.create_rectangle(175, 0, 200, 25, fill="red")
w.create_rectangle(200, 0, 225, 25, fill="red")
w.create_rectangle(225, 0, 250, 25, fill="red")
def dos():
w.create_rectangle(0, 0, 25, 25, fill="grey")
w.create_rectangle(25, 0, 50, 25, fill="grey")
w.create_rectangle(50, 0, 75, 25, fill="grey")
w.create_rectangle(75, 0, 100, 25, fill="grey")
w.create_rectangle(100, 0, 125, 25, fill="grey")
w.create_rectangle(125, 0, 150, 25, fill="grey")
w.create_rectangle(150, 0, 175, 25, fill="grey")
w.create_rectangle(175, 0, 200, 25, fill="grey")
w.create_rectangle(200, 0, 225, 25, fill="grey")
w.create_rectangle(225, 0, 250, 25, fill="grey")
button1 = Button(master, text="zasviet", command=uno)
button1.pack(side='left', padx=10)
button2 = Button(master, text="zhasni", command=dos)
button2.pack(side='left', padx=10)
button3 = Button(master, text="animacia", command=tres)
button3.pack(side='left', padx=10)
决不能在Tkinter使用的同一线程中使用sleep。由于Tkinter是一个单线程GUI,如果希望GUI正常工作,就不能使用睡眠和阻止主循环的东西,如while语句
相反,您希望使用after,因为这正是它的设计目的。在不使用睡眠的情况下及时处理事情
之后需要进行一些争论。第一个是以毫秒为单位的时间,因此一秒钟是1000毫秒。第二个是您正在调用的函数名,第三个可以是参数。它看起来像这个root.after1000,func_name,arg
在这种情况下,我们应该在一个列表中创建所有画布对象,这样我们以后就可以简单地用您想要的颜色更新这些对象,而不是在上一个列表上重新创建对象
在下面的代码中,我对您的代码进行了一些清理,并添加了执行此任务的功能。如果你有任何问题,请告诉我
import tkinter as tk
master = tk.Tk()
rectangle_list = []
canvas_width = 280
canvas_height = 50
w = tk.Canvas(master, width=canvas_width, height=canvas_height)
w.pack()
# Create the list of rectangle objects to be used later.
for i in range(10):
x = i * 25
if i == 1:
rectangle_list.append(w.create_rectangle(0, 0, 25, 25, fill="grey"))
else:
rectangle_list.append(w.create_rectangle(x-25, 0, x, 25, fill="grey"))
# manage color change loop based on index of rectangle list.
def uno(ndex=0):
if ndex < len(rectangle_list):
w.itemconfig(rectangle_list[ndex], fill='red')
master.after(1000, uno, ndex+1)
def dos(ndex=0):
if ndex < len(rectangle_list):
w.itemconfig(rectangle_list[ndex], fill='grey')
master.after(1000, dos, ndex+1)
tk.Button(master, text="zasviet", command=uno).pack(side='left', padx=10)
tk.Button(master, text="zhasni", command=dos).pack(side='left', padx=10)
tk.Button(master, text="animacia").pack(side='left', padx=10)
master.mainloop()
下图仅说明颜色正在按顺序更改,您可以在颜色更改期间按多个按钮来创建图案
你能详细解释一下这是怎么不起作用的吗?它等待了我放在时间括号里的秒数。睡眠,然后它同时将所有的矩形变成红色。不要在tkinter中使用睡眠。Tkinter是一个单线程应用程序,因此睡眠会阻塞主循环。下一步我将更新你的对象,而不是在旧对象的基础上绘制新对象。