Python tqdm 进度条阻塞 winsound
Python tqdm progress bar blocks winsound
我在使用 winsound 和 tqdm 时遇到了一些问题。我正在使用显示 2 个站点之间距离的进度条和播放站点名称的 winsound 制作地下控制系统。有进度条但是没有声音
from tqdm import tqdm
import time
import winsound
for i in tqdm(range(100)):
time.sleep(0.02)
winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)
但是当我这样做时:
from tqdm import tqdm
import time
import winsound
winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)
for i in tqdm(range(100)):
time.sleep(0.02)
声音播放没有问题。
来自 winsound
documentation SND_ASYNC
:
winsound.SND_ASYNC
Return immediately, allowing sounds to play asynchronously.
所以 SND_ASYNC
标志使得对 PlaySound
的调用是异步的。也就是说,它不会等到声音结束才返回。当您先拨打电话然后有效地休眠 2 秒以显示进度条时,这会很好地工作,因为在程序继续执行时声音有时间播放。
但是当程序的工作完成后你用这种方式播放声音时,PlaySound
函数立即returns然后程序就没有别的事可做了,所以它退出了,没有时间播放声音。
您可以通过将 winsound.SND_FILENAME
标志传递给 PlaySound
来更改此行为,这将使调用 同步 ,等待声音结束返回前播放:
from tqdm import tqdm
import time
import winsound
for i in tqdm(range(100)):
time.sleep(0.02)
winsound.PlaySound("Nastepna.wav", winsound.SND_FILENAME)
我在使用 winsound 和 tqdm 时遇到了一些问题。我正在使用显示 2 个站点之间距离的进度条和播放站点名称的 winsound 制作地下控制系统。有进度条但是没有声音
from tqdm import tqdm
import time
import winsound
for i in tqdm(range(100)):
time.sleep(0.02)
winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)
但是当我这样做时:
from tqdm import tqdm
import time
import winsound
winsound.PlaySound("Nastepna.wav", winsound.SND_ASYNC)
for i in tqdm(range(100)):
time.sleep(0.02)
声音播放没有问题。
来自 winsound
documentation SND_ASYNC
:
winsound.SND_ASYNC Return immediately, allowing sounds to play asynchronously.
所以 SND_ASYNC
标志使得对 PlaySound
的调用是异步的。也就是说,它不会等到声音结束才返回。当您先拨打电话然后有效地休眠 2 秒以显示进度条时,这会很好地工作,因为在程序继续执行时声音有时间播放。
但是当程序的工作完成后你用这种方式播放声音时,PlaySound
函数立即returns然后程序就没有别的事可做了,所以它退出了,没有时间播放声音。
您可以通过将 winsound.SND_FILENAME
标志传递给 PlaySound
来更改此行为,这将使调用 同步 ,等待声音结束返回前播放:
from tqdm import tqdm
import time
import winsound
for i in tqdm(range(100)):
time.sleep(0.02)
winsound.PlaySound("Nastepna.wav", winsound.SND_FILENAME)