Python Tkinter - 顶级 MoveInAnimation

标签 python animation tkinter move toplevel


是否有一个选项可以通过使用动画在运行时简单地 move 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(),但中间没有显示任何窗口。
有人可以帮我吗?我很困惑。 ^^

提前致谢。 问候!

最佳答案

看这行代码:

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

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

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

这是一个使用 lambda 的示例:

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

关于Python Tkinter - 顶级 MoveInAnimation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138115/

相关文章:

python - 什么是真假?它与真假有什么不同?

python - 在 Python 中删除相似文档

c++ - 函数指针不工作 (C++)

Python - 使用单个按键切换 turtle 笔的状态

python - 只有一个类可用于 GUI 编程

python - 如何确定按钮何时在 Tkinter 中发布?

python - spacy.lang.en 和 load ('en' ) 有什么区别?

python - 求两个数之和的最有效方法

javascript - 每当一个 div 的一部分与另一个 div 的一部分重叠时触发一个事件

jquery - CSS 过渡是从左到右而不是从右到左