You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQt5中MP3文件循环播放失效:为何仅播放一次?

问题原因分析

你的代码里音频只播放一次的核心问题在于 QMediaPlayer的play()方法是异步执行的,而且完全没处理播放完成的回调逻辑:

  • 当你在play()方法的for循环里连续调用100次self.player.play()时,播放器第一次调用play()后就进入了播放状态,后续的99次调用因为播放器正处于播放状态,会被直接忽略,根本不会触发新的播放。
  • 同时,循环不会等待当前音频播放完成就立刻执行下一次迭代,所以本质上只有第一次play()真正生效了。
修复方案

我们需要通过监听QMediaPlayer的播放状态变化,在每次播放完成后重新触发播放,直到达到100次的次数要求。下面是修改后的完整代码:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import *
from PyQt5 import QtCore, QtMultimedia
from PyQt5.QtGui import *
import sys

class AlarmWindow(QDialog):
    def __init__(self, alarmName, alarmTime, alarmTone):
        super().__init__()
        self.setWindowTitle(alarmName)  # 修正:这里你之前写成了赋值,应该是方法调用
        self.top, self.left = 100, 50
        self.width, self.height = 600, 350
        self.setFixedWidth(600)
        self.setFixedHeight(350)
        self.icon = "icons\alarm.ico"
        self.play_count = 0
        self.max_play_times = 100

        self.url = QtCore.QUrl.fromLocalFile(alarmTone)
        self.content = QtMultimedia.QMediaContent(self.url)
        self.player = QtMultimedia.QMediaPlayer()
        self.player.setMedia(self.content)
        # 监听播放状态变化,完成后自动续播
        self.player.mediaStatusChanged.connect(self.handle_play_finished)
        self.start_play()
        self.show()

    def start_play(self):
        if self.play_count < self.max_play_times:
            self.player.play()
            self.play_count += 1

    def handle_play_finished(self, status):
        # 当音频播放结束(进入EndOfMedia状态),触发下一次播放
        if status == QMediaPlayer.EndOfMedia:
            self.start_play()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = AlarmWindow("Name", "7:55 PM", "basic.mp3")
    app.exec()
关键修改点说明
  • 新增play_count和max_play_times变量,用来追踪已播放次数和目标次数
  • 监听mediaStatusChanged信号,当检测到音频播放完成(EndOfMedia状态)时,自动触发下一次播放
  • 修正了初始化里的setWindowTitle错误(你之前误写成了赋值语句,正确写法是调用方法)
  • 现在每次播放都会等待上一次播放完成后再开始,严格执行到100次播放结束

内容的提问来源于stack exchange,提问作者Debtanu Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:03:01