首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Toplevel MoveInAnimation

Python Toplevel MoveInAnimation
EN

Stack Overflow用户
提问于 2015-01-25 15:35:52
回答 1查看 110关注 0票数 1

是否可以使用动画在运行时简单地移动Tkinter TopLevel()窗口?我想到了一个由按钮触发的平滑的moveInAnimation。

下面是一些代码片段:

代码语言:javascript
复制
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中调用如下所示:

代码语言:javascript
复制
window = MoveInTopLevel()
window.move_in_from_bottom(480) # That's some resolution (height)

当我运行这个程序时,在最终位置(0,0)正确地显示了窗口,所有坐标都从(0,479)打印到(0,0)。但是中间没有显示窗口,我叫deiconify()

有人能帮我吗?我很困惑。^^

谢谢已经提前了。欢迎光临!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-25 17:10:08

请看这一行代码:

代码语言:javascript
复制
self.after(5, self.move_in_from_bottom(y))

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

after方法需要对函数的引用。一个常见的方法是使用lambda,尽管functools.partial也运行得很好。

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

代码语言:javascript
复制
self.after(5, lambda y=y: self.move_in_from_bottom(y))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28138115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档