PyQt5.QtMultimedia.QSound.play() 报错QSoundEffect(qaudio): Error decoding source

在哪里遇到的坑

使用PyQt5.QtMultimedia.QSound.play() 播放声音

需要注意的点

  1. 一:声音格式必须是wav格式

  2. 二:声音的比特率不能太大,具体多少还有具体测试可以使用在线转换

  3. 三:声音路径问题

    ①:可以是绝对路径:C:\test.wav
    ②:可以相对路径 ‘res/Img/子弹.png’
    ③:可以相对路径 ‘./res/Img/子弹.png’
    ④:但是不可以: ‘/res/Img/子弹.png’

示例代码

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



class MyPlainTextEdit(QPlainTextEdit):
    def __init__(self, *args, **kwargs):
        super(MyPlainTextEdit, self).__init__(*args, **kwargs)
        self._holes = []
        self._bullet = QPixmap('res/Img/子弹.png')  # 可以 前面不加/的相对路径
        # self._bullet = QPixmap('./res/Img/子弹.png')  # 可以 前面不加./的相对路径
        # self._bullet = QPixmap(r'G:\Tools\例子存放\pyqt5\res\Img\子弹.png')  # 可以绝对路径
        # self._bullet = QPixmap('/res/Img/子弹.png')  #  但是不可以 /的相对路径

        size = self._bullet.size()
        self._offset = QPoint(int(size.width() / 2), int(size.height() / 2))

    def mousePressEvent(self, event) -> None:
        self._holes.append(event.pos())
        self.viewport().update()
        QSound.play('./res/Sound/shot.wav')
        super(MyPlainTextEdit, self).mousePressEvent(event)

    def paintEvent(self, event) -> None:
        painter = QPainter(self.viewport())
        for hole in self._holes:
            painter.drawPixmap(hole - self._offset, self._bullet)

        super().paintEvent(event)


class Edit(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(Edit, self).__init__(*args, **kwargs)
        self.setGeometry(300, 300, 800, 600)
        self.setWindowTitle('测试绘图')

        self.edit = MyPlainTextEdit(self)
        self.edit.setGeometry(10, 10, 700, 500)


if __name__ == '__main__':
    app = QApplication([])
    e = Edit()
    e.show()
    app.exec_()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值