Как я могу заставить его показывать анимацию вместо конечного результата? - PullRequest
0 голосов
/ 01 мая 2019

Вот мой код:

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, и она тоже ничего не сделала. Это для класса, но никто из класса не имеет никаких идей.

1 Ответ

0 голосов
/ 02 мая 2019

Создать функцию, которая рисует прямоугольник, используя x и которая использует after(), чтобы снова запустить себя через 100 мс с большим x

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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...