Python Tkinter - Toplevel MoveInAnimation
Есть ли возможность просто переместить Tkinter TopLevel()
окно во время выполнения с помощью анимации? Я думал о плавном перемещении анимации, запускаемой кнопкой.
Вот фрагмент кода:
from Tkinter import Toplevel
class MoveInTopLevel(Toplevel):
'''
Animated MoveInToplevel.
'''
def __init__(self, *args, **kwargs):
Toplevel.__init__(self, *args, **kwargs)
self.overrideredirect(1)
def move_in_from_bottom(self, rootHeight):
y = rootHeight
y = max(y-1, 0)
s = "100x100+0+" + str(y)
print s
self.geometry(s)
self.deiconify()
if y > 0:
self.after(5, self.move_in_from_bottom(y))
Вызывается, например, в mainFunction так:
window = MoveInTopLevel()
window.move_in_from_bottom(480) # That's some resolution (height)
Когда я запускаю это, я получаю окно, правильно отображаемое в конечной позиции (0,0), и все координаты распечатываются от (0,479) до (0,0). Но между ними нет окон, хотя я звоню deiconify()
,
Кто-нибудь может мне помочь? Я сбит с толку. ^^
Заранее спасибо. Привет!
1 ответ
Посмотрите на эту строку кода:
self.after(5, self.move_in_from_bottom(y))
В этой строке кода вы сразу звоните self.move_in_from_bottom
перед вызовом после и результатом этого вызова (None
) передается after
команда.
after
Метод нуждается в ссылке на функцию. Обычный способ сделать это - использовать лямбду, хотя functools.partial тоже хорошо работает.
Вот пример использования лямбды:
self.after(5, lambda y=y: self.move_in_from_bottom(y))