如何使它显示动画而不只是最终结果?

时间:2019-05-01 16:01:11

标签: python animation tkinter

这是我的代码:

from tkinter import *
import time

master=Tk()
w=Canvas(master,width=500,height=500)
w.pack()
line=w.create_line
rect=w.create_rectangle
oval=w.create_oval
poly=w.create_polygon

rect(0,100,500,150,fill="#770077")
for x in range(0,51):
    rect(0,100,x*10,150,fill="#007700")
    w.after(100)

我尝试使用time.sleep()函数,但这没有帮助,所以我尝试了tkinter的wait函数,但它也没有执行任何操作。这是针对一堂课的,但是该堂课的所有人也没有任何想法。

1 个答案:

答案 0 :(得分:0)

创建函数,该函数使用x绘制矩形,并使用after()x较大的100ms之后再次运行自身。

import tkinter as tk

def draw_next_rect(x):
    w.create_rectangle(0, 100, x*10, 150, fill="#007700")
    x += 1
    # stop animation with x==51
    if x < 51:
        master.after(100, draw_next_rect, x)

master = tk.Tk()

w = tk.Canvas(master, width=500, height=500)
w.pack()

w.create_rectangle(0, 100, 500, 150, fill="#770077")

# start animation with x=0
draw_next_rect(0)

master.mainloop()

编辑:类似于ttk.Progressbar

import tkinter as tk
import tkinter.ttk as ttk

def draw_next_rect():
    progressbar.step()
    if progressbar['value'] < 50:
        master.after(100, draw_next_rect)

master = tk.Tk()

progressbar = ttk.Progressbar(master, maximum=50.001, mode='indeterminate')
progressbar.pack()

draw_next_rect()

maximum=的大小必须比50大一点,因为对于50,它会在value == maximum时删除小节     master.mainloop()