PyQt6使用Qt资源播放音频报错0x8007007B,求解决方法
Qt资源系统播放音频报错
0x8007007B的解决方法 问题场景
使用PyQt6编写的音频播放代码,本地文件路径(如sounds/clic.mp3)可正常运行,但改用Qt资源路径(如:/sounds/sounds/clic.mp3)后,出现错误:handleSourceError: 0x8007007B。
原代码:
from PyQt6.QtCore import QUrl from PyQt6.QtMultimedia import QMediaPlayer,QAudioOutput import ressources_rc def play(self, son ="sounds/clic.mp3"): self.player = QMediaPlayer() self.audio = QAudioOutput() self.player.setAudioOutput(self.audio) self.player.setSource(QUrl.fromLocalFile(son)) self.player.play()
问题原因
QUrl.fromLocalFile()仅能解析本地文件系统的路径,而Qt资源系统的路径属于资源URL,并非本地文件路径。用该方法解析资源路径会导致格式识别错误,触发0x8007007B(无效路径格式)的报错。
修复方案
直接使用QUrl()构造函数传入资源路径,无需调用fromLocalFile():
修改后的代码:
from PyQt6.QtCore import QUrl from PyQt6.QtMultimedia import QMediaPlayer,QAudioOutput import ressources_rc def play(self, son =":/sounds/clic.mp3"): # 路径需与qrc文件定义一致 self.player = QMediaPlayer() self.audio = QAudioOutput() self.player.setAudioOutput(self.audio) self.player.setSource(QUrl(son)) # 直接构造资源URL self.player.play()
额外注意事项:
- 核对资源路径正确性:若
.qrc文件中定义为<file>sounds/clic.mp3</file>,则资源路径应为:/sounds/clic.mp3,避免重复嵌套sounds目录 - 确保
ressources_rc.py已通过pyrcc6工具正确编译生成
内容的提问来源于stack exchange,提问作者Christophe Tdn
相关产品推荐
相关产品推荐

