Python Tkinter - Toplevel MoveInAnimation
Python Tkinter - Toplevel MoveInAnimation
是否可以使用动画在 运行 时间简单地移动 Tkinter TopLevel()
window?我想到了一个由按钮触发的平滑 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) 正确显示 window 并且所有坐标都从 (0,479) 向下打印到 (0,0)。但是中间没有显示windows,虽然我调用的是deiconify()
.
有人可以帮帮我吗?我很困惑。 ^^
提前致谢。
您好!
看这行代码:
self.after(5, self.move_in_from_bottom(y))
在那行代码中,您立即调用 self.move_in_from_bottom
before 之后的调用,并且该调用 (None
) 的结果是传递给 after
命令。
after
方法需要引用 函数。一种常见的方法是使用 lambda,尽管 functools.partial 也很有效。
这是一个使用 lambda 的例子:
self.after(5, lambda y=y: self.move_in_from_bottom(y))
是否可以使用动画在 运行 时间简单地移动 Tkinter TopLevel()
window?我想到了一个由按钮触发的平滑 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) 正确显示 window 并且所有坐标都从 (0,479) 向下打印到 (0,0)。但是中间没有显示windows,虽然我调用的是deiconify()
.
有人可以帮帮我吗?我很困惑。 ^^
提前致谢。 您好!
看这行代码:
self.after(5, self.move_in_from_bottom(y))
在那行代码中,您立即调用 self.move_in_from_bottom
before 之后的调用,并且该调用 (None
) 的结果是传递给 after
命令。
after
方法需要引用 函数。一种常见的方法是使用 lambda,尽管 functools.partial 也很有效。
这是一个使用 lambda 的例子:
self.after(5, lambda y=y: self.move_in_from_bottom(y))