Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 13, 2014 17:50:22

gleda
Зарегистрирован: 2014-12-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Анимация в tkinter

Здравствуйте! Пытаюсь сделать анимацию в tkinter. Если не ограничивать анимацию по времени, все в порядке, но если попытаться вставить ограничения, то при запуске выдает статичную картинку с объектом, уже находящемся в конечной точке. А желательно бы, так сказать, наблюдать эту анимацию. Что я делаю не так?
Питон 3.3.0

from tkinter import *
import time
def time(n):
    if n<80:
        canvas.move(obj,1,1)
        canvas.after(5,time(n+1))
frame=Tk()
canvas = Canvas(frame, width=690, height=700, background="#010214")
canvas.grid()
 
obj=canvas.create_oval(60,60,120,120,fill='#FFF70F',width=0)
time(0)
frame.mainloop()

Офлайн

#2 Дек. 13, 2014 19:01:55

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

Анимация в tkinter

Ну во-первых Вы написали не в той теме
По Вашему вопросу. Лучше в tkinter не использовать timer. Там есть свой механизм таймирования - метод .after. И не забывайте использовать lambda…

Ваш код:

import tkinter
#
#
def time_move(n):
    if n < 80:
        canvas.move(obj, 1, 1)
        canvas.after(50, lambda: time_move(n + 1))
#
frame = tkinter.Tk()
frame.geometry("690x700+400+0")
canvas = tkinter.Canvas(frame, width=690, height=700, background="#010214")
canvas.grid()
#
obj = canvas.create_oval(60, 60, 120, 120, fill='#FFF70F', width=0)
canvas.after(50, lambda: time_move(0))
#
frame.mainloop()

P.S. from tkinter import * использовать нельзя никогда!!!

Отредактировано 4kpt_II (Дек. 13, 2014 19:02:25)

Офлайн

#3 Дек. 13, 2014 19:08:19

gleda
Зарегистрирован: 2014-12-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Анимация в tkinter

Спасибо большое за ответ. Насчет не той темы не знала, больше не буду.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version