【问题标题】:Button motion animation in tkintertkinter 中的按钮运动动画
【发布时间】:2019-04-24 10:15:30
【问题描述】:

我想移动一个动画按钮。例如它从 x=0 和 y=0 开始,经过 0.1 秒 x=1 和 y=1 ... x=50 和 y=50。

我试过了:

import tkinter
import time

b=tkinter.Button(text="Example")
for i in range(50): 
    i+=1
    b.place(x=i, y=i)
    time.sleep(0.1)

执行完所有place命令后打开的窗口。

【问题讨论】:

  • 因为 tkinter 是基于事件的,当在其中使用 sleep() 时,您最终会冻结主循环。 after() 方法与事件管理器一起使用,因此不会发生这种情况。

标签: python button tkinter jquery-animate motion


【解决方案1】:

不要暂停/休眠你的 python 程序。正如@Mike-SMT 所指出的,它最终可能会冻结你的主循环。如果你想做动画,after 是要走的路。

import tkinter as tk

root = tk.Tk()
b = tk.Button(root, text="Example")

def move(i):
    if i<=50:
        b.place(x=i, y=i)
        b.after(100, lambda: move(i)) #after every 100ms
        i = i+1

move(0) #Start animation instantly
root.mainloop()

【讨论】:

  • 将此root.after(0, lambda: move(0)) 更改为move(0)。在这里做lambdaafter() 是没有意义的。
  • @Mike-SMT:哦,对不起。我的错。你是正确的,在第一步中使用 after 是不必要的。我会删除我的评论。
  • @BryanOakley 谢谢。我担心了一秒钟。我就像“我确信 after/lambda 在这里是矫枉过正的。”大声笑。
  • @Mike-SMT 是的,抱歉没有意识到这一点。最初我想在一段时间后开始动画,所以我也有一个 after 。但这不是必需的。
猜你喜欢
  • 1970-01-01
  • 2014-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多