1


Tkinter TopLevel()是否可以通过使用动画在运行时 简单地移动窗口?我想到了一个按钮触发的平滑 moveInAnimation。
这是一些代码片段:

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()
有人可以帮帮我吗?我很困惑。^^

提前致谢。问候!

4

1 回答 1

1

看这行代码:

self.after(5, self.move_in_from_bottom(y))

在该代码行中,您在调用 afterself.move_in_from_bottom 之前立即调用,并且该调用 ( None) 的结果被传递给after命令。

after方法需要对函数的引用。一种常见的方法是使用 lambda,尽管 functools.partial 也很有效。

下面是一个使用 lambda 的示例:

self.after(5, lambda y=y: self.move_in_from_bottom(y))
于 2015-01-25T17:10:08.680 回答