pygame.mixer PyQt5 threading子线程 QPushButton 选择文件 后播放 停止按钮 具体代码
时间: 2024-02-19 13:59:23 浏览: 86
Qt5开发及实例-CH208.rar,Qt5以QPushButton为例介绍按钮的用法的代码
以下是一个使用PyQt5和pygame.mixer实现的简单示例,可以选择音频文件并播放/停止:
```python
import pygame.mixer
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
class AudioPlayer(QWidget):
def __init__(self):
super().__init__()
# 初始化pygame.mixer
pygame.mixer.init()
# 创建一些组件
self.btn_select_file = QPushButton('选择文件', self)
self.btn_select_file.move(20, 20)
self.btn_select_file.clicked.connect(self.select_file)
self.btn_play = QPushButton('播放', self)
self.btn_play.move(20, 60)
self.btn_play.clicked.connect(self.play_audio)
self.btn_stop = QPushButton('停止', self)
self.btn_stop.move(120, 60)
self.btn_stop.clicked.connect(self.stop_audio)
self.btn_stop.setEnabled(False)
# 当前音频文件
self.current_audio = None
# 选择音频文件
def select_file(self):
file_path, _ = QFileDialog.getOpenFileName(self, '选择音频文件', '', '音频文件 (*.mp3 *.wav)')
if file_path:
self.current_audio = pygame.mixer.Sound(file_path)
# 播放音频
def play_audio(self):
if self.current_audio:
# 创建一个线程来播放音频,以免阻塞主线程
audio_thread = threading.Thread(target=self.current_audio.play)
audio_thread.start()
# 启用停止按钮
self.btn_stop.setEnabled(True)
else:
print('未选择音频文件')
# 停止音频
def stop_audio(self):
if self.current_audio:
self.current_audio.stop()
self.btn_stop.setEnabled(False)
# 关闭窗口时停止音频播放
def closeEvent(self, event):
if self.current_audio:
self.current_audio.stop()
if __name__ == '__main__':
app = QApplication([])
window = AudioPlayer()
window.show()
app.exec_()
```
在这个示例中,我们创建了一个`AudioPlayer`窗口类,其中包含了三个按钮:选择文件、播放和停止。当用户点击选择文件按钮时,会弹出一个文件选择对话框,让用户选择音频文件。当用户点击播放按钮时,我们会创建一个新的线程来播放当前音频文件,并启用停止按钮。当用户点击停止按钮时,我们会停止当前正在播放的音频文件。
请注意,我们使用了`pygame.mixer.Sound`来加载和播放音频文件,因为Pygame具有比PyQt5更好的音频处理能力。另外,我们将音频播放放在了一个独立的线程中,以免阻塞主线程。最后,我们还在窗口关闭时停止了当前正在播放的音频。
阅读全文