Python Tkinter - Toplevel 移入动画

2024-09-24 22:30:02 发布

您现在位置:Python中文网/ 问答频道 /正文


有没有一个选项可以通过使用动画在运行时简单地移动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()
有人能帮我吗?我很困惑。^^你知道吗

提前谢谢你。 问候语!你知道吗


Tags: infromselfmoveinittkinterdefargs
1条回答
网友
1楼 · 发布于 2024-09-24 22:30:02

看看这行代码:

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

在这行代码中,您将立即在调用after之前调用self.move_in_from_bottom,并且该调用(None)的结果将传递给after命令。你知道吗

after方法需要函数的引用。不过,一种常见的方法是使用lambdafunctools.部分效果也不错。你知道吗

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

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

相关问题 更多 >