Python Tkinter-顶级MoveInAnimation

Python Tkinter-顶级MoveInAnimation,python,animation,tkinter,move,toplevel,Python,Animation,Tkinter,Move,Toplevel,是否有一个选项可以通过使用动画在运行时简单地移动Tkinter TopLevel()窗口?我想到了一个由按钮触发的平滑移动 以下是一些代码片段: from Tkinter import Toplevel class MoveInTopLevel(Toplevel): ''' Animated MoveInToplevel. ''' def __init__(self, *args, **kwargs): Toplevel.__init__(sel


是否有一个选项可以通过使用动画在运行时简单地移动
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))
例如,在main函数中调用如下:

window = MoveInTopLevel()
window.move_in_from_bottom(480) # That's some resolution (height)
当我运行此命令时,我将在最终位置(0,0)正确显示窗口,并将所有坐标从(0479)打印到(0,0)。尽管我正在调用
deiconify()

,但中间没有显示窗口 有人能帮我吗?我很困惑^^

谢谢,这是事先准备好的。
你好

看看这行代码:

self.after(5, self.move_in_from_bottom(y))
在该行代码中,您将立即调用
self。在调用之前将\u从\u底部
移入\u,然后将该调用的结果(
None
)传递给
after
命令

after
方法需要对函数的引用。实现这一点的常用方法是使用lambda,尽管functools.partial也可以很好地工作

以下是使用lambda的示例:

self.after(5, lambda y=y: self.move_in_from_bottom(y))

理解。非常感谢!:)