Python 一个动画在另一个动画开始时停止

Python 一个动画在另一个动画开始时停止,python,tkinter,Python,Tkinter,所以基本上,每当用户点击时,它会使+1向上浮动,但是每当一个向上浮动,我再次点击时,已经向上浮动的+1就会停在它的位置上,就停在那里。如果我再次点击,它也会这样做,直到有数百个。我怎样才能使它永远不会停止动画,即使它对于Roop?< P>都是一个。你不能在TKTTER回调的中间使用睡眠>代码>,而不使整个程序停止运行。毕竟,这正是睡眠(0.05)的意思:使整个程序停止运行0.05秒 而且它不仅仅是sleep——不管这个函数做什么,当它运行时,这就是正在运行的代码;没有其他代码可以运行,因此您的U

所以基本上,每当用户点击时,它会使+1向上浮动,但是每当一个向上浮动,我再次点击时,已经向上浮动的+1就会停在它的位置上,就停在那里。如果我再次点击,它也会这样做,直到有数百个。我怎样才能使它永远不会停止动画,即使它对于Roop?

< P>都是一个。你不能在TKTTER回调的中间使用<代码>睡眠>代码>,而不使整个程序停止运行。毕竟,这正是睡眠(0.05)的意思:使整个程序停止运行0.05秒

而且它不仅仅是
sleep
——不管这个函数做什么,当它运行时,这就是正在运行的代码;没有其他代码可以运行,因此您的UI被冻结

有两种基本解决方案:

  • 更改函数,使其执行动画的一个步骤,安排下一个步骤在0.05秒内作为回调运行,然后返回
  • 使用背景线程
第二个可能看起来更简单,但不幸的是,在多线程应用程序中使用Tkinter有点麻烦。那么,让我们做第一个。大概是这样的:

for plusOneFrames in range(0, 25):
    xxUL = xxUL + 0  
    yyUL = yyUL - 5

    myText = screen.create_text( xxUL, yyUL, text = "+1", font = "Arial 25", fill = "black"  )
    screen.update()
    sleep(0.05)
    screen.delete( myText )
screen.delete( myText )
(我不知道这里的确切细节是否适用于您的实际代码事实上,如果您的代码没有使用Python 3.0+,或者您没有在另一个函数中本地执行此操作,我知道它不起作用。但是由于您没有显示您的实际代码,我不得不做一些猜测,希望您能够理解如何调整。)

有关更多详细信息,请参阅;有关事件循环或事件驱动编程的良好教程,请访问谷歌。

请发布一篇文章,而不仅仅是一段随机代码。
def nextframe(i):
    nonlocal xxUL, yyUL
    xxUL = xxUL + 0  
    yyUL = yyUL - 5

    myText = screen.create_text( xxUL, yyUL, text = "+1", font = "Arial 25", fill = "black"  )
    screen.update()
    screen.delete( myText )
    i += 1
    if i != 25:
        screen.after(0.05, lambda: nextframe(i))
    else:
        screen.delete( myText )

nextframe(0)