pygame.mixer PyQt5 threading子线程控制 QPushButton 选择文件 后播放 停止按钮 具体代码
时间: 2024-02-19 08:59:27 浏览: 73
以下是一个示例代码,演示了如何在PyQt5中使用Pygame.mixer和threading模块,控制一个QPushButton按钮来选择并播放音乐文件,以及停止播放。
```python
import os
import sys
import threading
import pygame
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFileDialog
class MusicPlayer(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建选择文件按钮和播放、停止按钮
self.selectFileBtn = QPushButton('选择文件', self)
self.selectFileBtn.move(20, 20)
self.selectFileBtn.clicked.connect(self.select_file)
self.playBtn = QPushButton('播放', self)
self.playBtn.move(20, 60)
self.playBtn.clicked.connect(self.play_music)
self.stopBtn = QPushButton('停止', self)
self.stopBtn.move(20, 100)
self.stopBtn.clicked.connect(self.stop_music)
# 初始化Pygame.mixer并创建一个线程
pygame.mixer.init()
self.music_thread = threading.Thread(target=self.play_music_thread, args=())
# 设置窗口属性
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle('音乐播放器')
self.show()
def select_file(self):
# 弹出文件选择对话框
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self, '选择音乐文件', '', '音乐文件 (*.mp3 *.wav)', options=options)
if fileName:
# 保存选择的文件路径
self.filePath = fileName
def play_music(self):
# 播放音乐
if hasattr(self, 'filePath'):
# 如果已经选择了文件,则启动音乐播放线程
self.music_thread.start()
else:
print('请先选择音乐文件!')
def play_music_thread(self):
# 在新线程中播放音乐
pygame.mixer.music.load(self.filePath)
pygame.mixer.music.play()
def stop_music(self):
# 停止音乐
pygame.mixer.music.stop()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MusicPlayer()
sys.exit(app.exec_())
```
在此示例代码中,我们首先创建了一个名为`MusicPlayer`的QWidget类,它包含了选择文件、播放和停止按钮。在`initUI`方法中,我们初始化了Pygame.mixer并创建了一个新的线程,用于在后台播放音乐文件。`select_file`方法用于弹出文件选择对话框并保存所选文件的路径。`play_music`方法在点击播放按钮时启动音乐播放线程。`play_music_thread`方法在新线程中加载并播放音乐。`stop_music`方法用于停止当前正在播放的音乐。
阅读全文