擅长:python、mysql、java
<p>大多数情况下<code>.after_cancel</code>脚本可以通过使用<code>if</code>语句来避免。例如,看看这个:</p>
<pre class="lang-py prettyprint-override"><code>import tkinter as tk
t = 60000
def pause():
global timerState
timerState = False
timerButton.config(text="Play", command=start_countdown)
def start_countdown():
global timerState
timerState = True
timerButton.config(text="Pause", command=pause)
countdown()
def countdown():
global t
if timerState:
timerLabel.config(text=t)
t -= 1
if t > 0:
timerLabel.after(1, countdown)
root = tk.Tk()
timerLabel = tk.Label(root, text="")
timerLabel.pack()
timerButton = tk.Button(root, text="Play", command=start_countdown)
timerButton.pack()
root.mainloop()
</code></pre>
<p>我修改了您的代码以显示<code>t</code>,而没有使用<code>mm:ss</code>格式。主要的一点是,如果<code>timerState</code>是<code>False</code>,那么<code>timerLabel.after(1, countdown)</code>将永远不会被调用,因此没有必要使用<code>.after_cancel</code></p>
<p>注意:您没有考虑其他代码所花费的时间,因此<code>t</code>实际上不是以毫秒为单位的(至少对于我速度较慢的计算机来说是这样)</p>