pygame.mixer PyQt5 threading 播放 停止按钮 具体代码
时间: 2024-02-19 14:58:50 浏览: 144
下面是一个结合了 Pygame、PyQt5 和 threading 的示例代码,实现了播放和停止按钮的功能:
```python
import pygame
import threading
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtCore import Qt, QThread, pyqtSignal
pygame.mixer.init()
sound = pygame.mixer.Sound('audio.wav')
is_playing = False
class SoundThread(QThread):
play_signal = pyqtSignal()
stop_signal = pyqtSignal()
def __init__(self):
super().__init__()
self.stop_event = threading.Event()
def run(self):
while not self.stop_event.is_set():
self.play_signal.emit()
pygame.time.wait(int(sound.get_length() * 1000))
self.stop_signal.emit()
def stop(self):
self.stop_event.set()
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.play_button = QPushButton('播放', self)
self.play_button.setGeometry(50, 50, 100, 30)
self.play_button.clicked.connect(self.play_sound)
self.stop_button = QPushButton('停止', self)
self.stop_button.setGeometry(200, 50, 100, 30)
self.stop_button.clicked.connect(self.stop_sound)
self.thread = SoundThread()
self.thread.play_signal.connect(self.play_sound)
self.thread.stop_signal.connect(self.stop_sound)
def play_sound(self):
global is_playing
if not is_playing:
sound.play()
is_playing = True
def stop_sound(self):
global is_playing
sound.stop()
is_playing = False
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
window.thread.start()
app.exec_()
window.thread.stop()
```
在这个例子中,`SoundThread` 继承自 `QThread`,用于在后台线程中播放音频文件。它有两个信号 `play_signal` 和 `stop_signal`,分别用于通知主线程播放和停止播放音频文件。在 `run()` 方法中,使用 `pygame.time.wait()` 函数等待音频文件播放完毕,并发射 `stop_signal` 信号。
在 `MainWindow` 类中,定义了 `play_sound()` 和 `stop_sound()` 方法,用于在主线程中播放和停止音频文件,并在按钮的 `clicked` 信号中连接这些方法。
在 `MainWindow` 类的构造函数中,创建了 `SoundThread` 对象并连接了它的信号与槽。然后在主线程中启动了这个 `SoundThread` 对象。
在程序中使用了全局变量 `is_playing`,用于记录音频文件的播放状态。
阅读全文