擅长:python、mysql、java
<p>部分问题肯定与您调用<code>sleep</code>有关。作为一个好的经验法则,您不应该在GUI的主线程中调用<code>sleep</code>。它阻止GUI处理<em>所有</em>事件,包括屏幕刷新。在</p>
<p>一般来说,您还应该避免调用<code>update</code>。如果在<code>update</code>的处理过程中最后调用了一个再次调用<code>update</code>的方法,则可能会导致嵌套的事件循环。在</p>
<p>下面是一个非常简单的解决方案示例,它创建了一个可以设置动画的按钮。{cde>每隔一个字符串对一个新的字符串进行迭代。这个例子将永远保持动画效果,但是你可以很容易地让它只显示一次每个项目。这将修改文本以使示例变短,但您可以轻松地修改它以更改图像而不是文本。在</p>
<pre><code>import Tkinter as tk # use tkinter for python 3.x
class AnimatedButton(tk.Button):
def __init__(self, *args, **kwargs):
tk.Button.__init__(self, *args, **kwargs)
self._job = None
def cancel_animation(self):
if self._job is not None:
self.after_cancel(self._job)
self._job = None
def animate(self, textlist):
text = textlist.pop(0)
textlist.append(text)
self.configure(text=text)
self._job = self.after(500, self.animate, textlist)
</code></pre>
<p>您可以像任何其他按钮一样使用它,但可以调用<code>animate</code>来启动动画,并调用<code>cancel_animate</code>来取消它:</p>
^{pr2}$