擅长:python、mysql、java
<p>有几种可能的方法</p>
<p>因为<code>tkinter</code>在Python3上是线程安全的(*),所以最简单的方法可能是启动稍微修改过的<code>play</code>函数作为第二个线程</p>
<p>在全局上下文中,创建一个<code>threading.Event</code>。我建议用<code>stop_playing</code>这个名字</p>
<p>在play(播放)功能中,一次仅睡眠一小段时间,检查是否设置了<code>stop_playing</code>:</p>
<pre><code>for i in mp3s:
mixer.music.load(i)
mixer.music.play()
audio = MP3(i)
playtime = 0
interval = 100 # ms
while playtime < audio.info.length:
time.sleep(interval)
playtime += interval
if stop_playing.is_set():
# TODO: stop the current playback.
# Then exit the thread.
return
</code></pre>
<p>“Play”按钮的新回调应该为<code>play()</code>和<code>start()</code>它创建一个线程</p>
<p>“停止”按钮的回调应该只调用<code>stop_playing.set()</code>。这将导致播放线程停止</p>
<p>(*前提是它使用已启用线程的<code>tcl</code>编译。)</p>