Создание анимации линий в Python - PullRequest
0 голосов
/ 08 июня 2018

Я реализовал следующий код для создания анимации, состоящей из строк с tkinter (df - это просто кадр данных Pandas).Проблема в том, что я просто вижу результат, но каким-то образом сон не выполняется (это означает, что анимация линий отсутствует).Как этого достичь?Более того, в большинстве случаев сны довольно малы (несколько миллисекунд), поэтому я не знаю, возможно ли это.

Во-вторых, я хотел бы сохранить анимацию как видео (например, mpeg),Решением было бы сохранить изображения и затем создать видео, но это немного громоздко (и я получу много изображений).Есть ли другая возможность (возможно, с использованием подхода, отличного от tkinter)?

root = Tk()
root.title("User {}".format(user_id))
canvas = Canvas(width=1920, height=1200, bg='white')
canvas.pack(expand=YES, fill=BOTH)
prev = None
temp_prev = None

for index, row in df.iterrows():
    if prev is not None:
        canvas.create_line(prev["x"], prev["y"], row["x"], row["y"])

    if row["action"] == "ACTION_UP":
        prev = None
    else:
        prev = row

    if temp_prev is not None:
        sleep(0.04)

    temp_prev = row

root.mainloop()

РЕДАКТИРОВАТЬ: я обновил код, используя after().К сожалению, опять же только окончательный результат строится, но анимация отсутствует.

root = Tk()
root.title("User {}".format(user_id))
canvas = Canvas(width=1920, height=1200, bg='white')
canvas.pack(expand=YES, fill=BOTH)
root.after(0, add_line(canvas, df.iloc[1], 0, df, root))
root.mainloop()

def add_line(canvas, next, idx, df, root):
    row = df.iloc[idx]
    idx = idx + 1
    if row["action"] != "ACTION_UP":
        canvas.create_line(row["x"], row["y"], next["x"], next["y"])

    next = df.iloc[idx + 1]

    if (idx + 2) < len(df):
        root.after(int(next['timestamp_offset'] - row['timestamp_offset']), add_line(canvas, next, idx, df, root))
    else:
        return
...