在哪里遇到的坑
使用PyQt5.QtMultimedia.QSound.play() 播放声音
需要注意的点
-
一:声音格式必须是wav格式
-
二:声音的比特率不能太大,具体多少还有具体测试可以使用在线转换
-
三:声音路径问题
①:可以是绝对路径: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_()