一、音频播放
QSoundEffect 可以用来播放无压缩的音频文件(典型的是 .wav 文件),通过它我们不仅能够以低延迟的方式来播放音频,还能够对音频进行更进一步的操作(比如控制音量)。该类非常适合用来播放交互音效,如弹出框的提示音、游戏音效等。
我们可以在终端中使用 pip 安装 pyside6 模块。
pip install pyside6
创建 QSoundEffect 类的对象方法如下:
QSoundEffect(parent:QObject=None)
QSoundEffect(audioDevice:QAudioDevice, parent:QObject=None)
QSoundEffect 类常用方法如下:
# 实例方法
setSource(url:QUrl) -> None # 设置音频源
source() -> QUrl # 获取音频源
setAudioDevice(device:QAudioDevice) -> None # 设置音频设备
audioDevice() -> QAudioDevice # 获取音频设备
setLoopCount(loopCount:int) -> None # 设置播放次数
loopCount() -> int # 获取播放次数
loopsRemaining() -> int # 获取剩余播放次数
setMuted(muted:bool) -> None # 设置是否静音
isMuted() -> bool # 获取是否静音
setVolume(volume:float) -> None # 设置音量
volume() -> float # 获取音量
isPlaying() -> bool # 获取是否正在播放
isLoaded() -> bool # 获取是否已经加载声源
status() -> QSoundEffet.Status # 获取播放状态
# 槽函数
play() -> None # 开始播放
stop() -> None # 停止播放
# 静态方法
supportedMimeTypes() -> List[str] # 获取支持的类型
用 setSource(url:QUrl)
方法设置音频源,参数 QUrl 可以是指向网络的文件,也可以是本机文件;用 source()
方法获取音频源 QUrl。
用 status()
方法获取当前的播放状态,返回值是枚举类型 QSoundEffect.Status,可取值如下:
QSoundEffect.Status.Null
QSoundEffect.Status.Loading
QSoundEffect.Status.Ready
QSoundEffect.Status.Error
QSoundEffect 类常用信号如下:
audioDeviceChanged() # 音频设备发生改变时发射信号
loadedChanged() # 加载状态发生改变时发射信号
loopCountChanged() # 循环次数发生改变时发射信号
loopsRemainingChanged() # 剩余循环次数发生改变时发射信号
mutedChanged() # 静音状态发生改变时发射信号
playingChanged() # 播放状态发生改变时发射信号
sourceChanged() # 音频源发生改变时发射信号
statusChanged() # 状态发生改变时发射信号
volumeChanged() # 音量发生改变时发射信号
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QLabel, QPushButton, QCheckBox, QSlider
from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QFormLayout
from PySide6.QtWidgets import QFileDialog
from PySide6.QtCore import QUrl, Qt
from PySide6.QtMultimedia import QSoundEffect
class MyWidget(QWidget):
def __init__(self):
# 1、调用父类的__init__()方法
super().__init__()
self.setup_ui()
def setup_ui(self):
# 1、设置窗口对象大小
self.resize(700, 500)
# 2、创建音频播放对象
self.audio = QSoundEffect()
v_layout = QVBoxLayout(self)
self.label_open_file = QLabel("未选择文件")
v_layout.addWidget(self.label_open_file)
form_layout = QFormLayout()
v_layout.addLayout(form_layout)
self.label_volume = QLabel("音量:")
self.slider_volume = QSlider()
# 设置滑块的范围
self.slider_volume.setRange(0, 100)
# 设置滑块的的当前数据
self.volume = 80
self.slider_volume.setValue(self.volume)
form_layout.addRow(self.label_volume, self.slider_volume)
self.slider_volume.valueChanged.connect(self.change_volume)
h_layout = QHBoxLayout()
v_layout.addLayout(h_layout)
self.button_open_file = QPushButton("选择音频文件")
self.button_open_file.clicked.connect(self.open_file)
h_layout.addWidget(self.button_open_file)
self.button_action = QPushButton("开始播放")
h_layout.addWidget(self.button_action)
self.button_action.clicked.connect(self.action)
self.checkBox_mute = QCheckBox("是否静音")
h_layout.addWidget(self.checkBox_mute)
# 没有不确定状态
self.checkBox_mute.setTristate(False)
# 设置复选框状态
self.checkBox_mute.setCheckState(Qt.CheckState.Unchecked)
self.checkBox_mute.stateChanged.connect(self.mute)
# 当播放状态发生改变时发射信号
self.audio.playingChanged.connect(self.reset_play)
def open_file(self):
# 1、创建文件对话框
fileName, filter = QFileDialog.getOpenFileName(self, caption="选择音频文件", dir="./", filter="音频文件(*.wav)")
# 2、选择文件后更改标签的文本
self.label_open_file.setText(f"你选择了【{fileName}】音频文件")
# 3、设置音频播放对象的声源
self.audio.setSource(QUrl.fromLocalFile(fileName))
# 4、设置音频播放对象的播放次数
self.audio.setLoopCount(1)
# 5、设置音频播放对象不静音
self.audio.setMuted(False)
# 6、设置音量
self.audio.setVolume(self.volume / 100)
# 7、重置为开始播放按钮
self.button_action.setText("开始播放")
def action(self):
if self.button_action.text() == "开始播放":
# 开始播放
self.audio.play()
# 重新设置按键文本为停止播放
self.button_action.setText("停止播放")
elif self.button_action.text() == "停止播放":
# 停止播放
self.audio.stop()
# 重新设置按键文本为开始播放
self.button_action.setText("开始播放")
def mute(self, state):
if state:
# 设置音频播放对象静音
self.audio.setMuted(True)
else:
# 设置音频播放对象不静音
self.audio.setMuted(False)
def change_volume(self, value):
# 设置音量
self.audio.setVolume(value / 100)
def reset_play(self):
self.button_action.setText("开始播放")
if __name__ == "__main__":
# 1、创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2、创建一个窗口
window = MyWidget()
# 3、展示窗口
window.show()
# 4、进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
二、媒体播放器
播放器 QMediaPlayer 可以播放音频和视频,它可以直接播放的格式有限。要播放更多格式的音频或视频,例如 mp4 格式的视频文件,需要在本机上安装解码器。
QMediaPlayer 继承自 QObject,用 QMediaPlayer 定义播放器实例对象的方法如下所示,其中 parent 是继承自 QObject 类的实例对象。
QMediaPlayer(parent:QObject=None)
QMediaPlayer 类的常用方法:
# 实例方法
sourceDevice() -> QIODevice # 获取音频或视频源QIODevice
setActiveAudioTrack(index:int) -> None # 设置当前的声道
activeAudioTrack() -> int # 获取当前的声道
setActiveVideoTrack(index:int) -> None # 设置当前的视频轨道
activeVideoTrack() -> int # 获取当前的视频轨道
setActiveSubtitleTrack(index:int) -> None # 设置当前的子标题轨道
activeSubtitleTrack() -> int # 获取当前的子标题轨道
playbackRate() -> float # 获取播放速率
isSeekable() -> bool # 获取是否可以定位到某一播放时间
position() -> int # 获取当前的播放时间(毫秒)
setAudioOutput(output:QAudioOutput) -> None # 设置播放音频的设备
setVideoOutput(arg__1:QVideoWidget) -> None # 设置显示视频的控件
setVideoOutput(arg__1:QGraphcicVideoItem) -> None # 设置显示视频的图项
setLoops(loops:int) -> None # 设置循环播放次数
loops() -> int # 获取循环播放次数
duration() -> int # 获取音频或视频可以播放的总时长(毫秒)
playbackState() -> QMedioPlayer.playbackState # 获取播放状态
mediaStatus() -> mediaStatus # 获取播放器所处的状态
error() -> QMediaPlayer.Error # 获取出错原因
errorString() -> str # 获取出错信息
hasAudio() -> bool # 获取多媒体中是否有音频
hasVideo() -> bool # 获取多媒体中是否有视频
bufferProgress() -> float # 获取缓冲百分比,100%时才可以播放
# 槽方法
setSource(source:QUrl, str) -> None # 设置要播放的音频或视频源
setSourceDevice(device:QIODevice, sourceUrl:QUrl=QUrl()) -> None # 设置音频或视频地址QUrl
setPlaybackRate(rate:float) -> None # 设置播放速率
setPosition(position:int) -> None # 设置播放时间(毫秒)
play() -> None # 播放音频或视频
pause() -> None # 暂停播放
stop() -> None # 停止播放并将播放位置重置到开头
要播放音频或视频,首先需要给 QMediaPlayer 设置媒体源。可以用 setSource(source:QUrl)
方法或用 setSourceDevice(device:QIODevice,sourceUrl:QUrl=Default(QUrl))
方法设置媒体文件,其中 sourceUrl 是可选参数,用于获取额外的信息;用 source()
和 sourceDevice()
分别获取媒体源 QUrl 和 QIODevice。
要显示视频,需要将 QMediaPlayer 与显示视频的控件关联,可以显示视频的控件有 QVideoWidget、QGraphicsVideoItem,关联方法分别是 setVideoOutput(QVideoWidget)
和 setVideoOutput(QGraphicsVideoItem)
。要播放音频,需要用 setAudioOutput(output:QAudioOutput)
方法设置音频输出设备。
用 setPlaybackRate(rate:float)
方法设置播放速率,参数为 1.0 表示正常播放;参数 rate 可以为负值,表示回放速率。有些多媒体不支持回放。
用 setLoops(loops:int)
方法设置循环播放次数,参数 loops 可取 QMediaPlayer.Infinite(无限次)、QMediaPlayer.Once(一次)或 其它整数。
用 state()
方法获取播放状态 QMediaPlayer.State,返回值可能取值如下:
QMediaPlayer.State.StoppedState
QMediaPlayer.State.PlayingState
QMediaPlayer.State.PausedState
用 playbackState()
方法获取播放器的播放状态 QMediaPlayer.PlaybackState,返回值可能取值如下:
QMediaPlayer.PlaybackState.StoppedState
QMediaPlayer.PlaybackState.PlayingState
QMediaPlayer.PlaybackState.PausedState
用 mediaStatus()
方法获取播放器所处的状态 QMediaPlayer.MediaStatus,返回值可能取值如下:
QMediaPlayer.MediaStatus.NoMedia
QMediaPlayer.MediaStatus.LoadingMedia
QMediaPlayer.MediaStatus.LoadedMedia
QMediaPlayer.MediaStatus.StalledMedia
QMediaPlayer.MediaStatus.BufferingMedia
QMediaPlayer.MediaStatus.BufferedMedia
QMediaPlayer.MediaStatus.EndOfMedia
QMediaPlayer.MediaStatus.InvalidMedia
用 error()
方法获取播放器出错信息 QMediaPlayer.Error,返回值可能取值如下:
QMediaPlayer.Error.NoError
QMediaPlayer.Error.ResourceError
QMediaPlayer.Error.FormatError
QMediaPlayer.Error.NetworkError
QMediaPlayer.Error.AccessDeniedError
QMediaPlayer 类的常用信号:
activeTracksChanged() # 当轨道发生改变时发射信号
audioOutputChanged() # 音频输出设备发生改变时发射信号
bufferProgressChanged(progress:float) # 缓冲进度发生改变时发射信号
durationChanged(duration:int) # 播放时长发生改变时发射信号
errorChanged() # 出错信息发生改变时发射信号
errorOccurred(error:QMediaPlayer.Error, errorString:str) # 播放出错时发射信号
hasAudioChanged(available:bool) # 可播放音频的状态发生改变时发射信号
hasVideoChanged(videoAvailable:bool) # 可播放视频的状态发生改变时发射信号
loopsChanged() # 播放次数发生改变时发射信号
mediaStatusChanged(status:QMediaPlayer.MediaStatus) # 播放器所在的状态发生改变时发射信号
metaDataChanged() # 播放器元数据发生改变时发射信号
playbackRateChanged(rate:float) # 播放速度发生改变时发射信号
playbackStateChanged(newState:QMediaPlayer.PlaybackState) # 播放状态发生改变时发射信号
playingChanged(playing:bool) # 播放状态发生改变时发射信号
positionChanged(position:int) # 播放位置发生改变时发射信号
seekableChanged(seekable:bool) # 可定位播放状态发生改变时发射信号
sourceChanged(media:QUrl) # 音频或视频源发生改变时发射信号
tracksChanged() # 轨道发生改变时发射信号
videoOutputChanged() # 关联的视频播放器发生改变时发射信号
播放器 QMediaPlayer 需要关联音频输出设备和视频输出控件才能播放音频和视频。音频输出需要定义 QAudioOutput 的实例,QAudioOutput 用于连接 QMediaPlayer 与音频输出设备,视频输出需要用到视频控件 QVideoWidget 或视频图项 QGraphicsVideoItem,其中 QGraphicsVideoItem 作为图项应用于场景中。QAudioOutput 继承自 QObject,QVideoWidget 继承自 QWidget,QGraphicsVideoItem 继承自 QGraphicsObject。
用 QAudioOutput、QVideoWidget 和 QGraphicsVideoItem 创建实例对象的方法如下所示,其中 QAudioDevice 是本机上的音频输入输出设备。
QAudioOutput(parent:QObject=None)
QAudioOutput(device:QAudioDevice, parent:QObject=None)
QVideoWidget(parent:QWidget=None)
QGraphicsVideoItem(parent:QGrapicsItem=None)
QAudioOutput 类的常用方法如下:
# 实例方法
volume() -> float # 获取音量
isMuted() -> bool # 获取是否静音
device() -> QAudioDevice # 获取音频设备
# 槽方法
setVolume(volume:float) -> None # 设置音量,参数取值范围为0~1
setMuted(muted:bool) -> None # 设置静音状态
setDevice(device:QAudioDevice) -> None # 设置音频设备
QAudioOutput 类的常用信号如下:
deviceChanged() # 音频设备发生改变时发射信号
mutedChanged(muted:bool) # 静音状态发生改变时发送信号
volumeChanged(volume:float) # 音量发生改变时候发射信号
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QLabel, QPushButton, QCheckBox, QSlider
from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QFormLayout
from PySide6.QtWidgets import QFileDialog
from PySide6.QtCore import QUrl, Qt
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
class MyWidget(QWidget):
def __init__(self):
# 1、调用父类的__init__()方法
super().__init__()
self.mediaPlayer = None
self.setup_ui()
def setup_ui(self):
# 1、设置窗口对象大小
self.resize(700, 500)
v_layout = QVBoxLayout(self)
self.label_open_file = QLabel("未选择文件")
v_layout.addWidget(self.label_open_file)
form_layout = QFormLayout()
v_layout.addLayout(form_layout)
self.label_volume = QLabel("音量:")
self.slider_volume = QSlider()
# 设置音量滑块的范围
self.slider_volume.setRange(0, 100)
form_layout.addRow(self.label_volume, self.slider_volume)
self.slider_volume.valueChanged.connect(self.change_volume)
h_layout = QHBoxLayout()
v_layout.addLayout(h_layout)
self.button_open_file = QPushButton("选择音频文件")
self.button_open_file.clicked.connect(self.open_file)
h_layout.addWidget(self.button_open_file)
self.button_action = QPushButton("开始播放")
h_layout.addWidget(self.button_action)
self.button_action.clicked.connect(self.action)
self.button_stop = QPushButton("停止播放")
h_layout.addWidget(self.button_stop)
self.button_stop.clicked.connect(self.stop)
self.checkBox_mute = QCheckBox("是否静音")
h_layout.addWidget(self.checkBox_mute)
# 没有不确定状态
self.checkBox_mute.setTristate(False)
self.checkBox_mute.toggled.connect(self.mute)
def open_file(self):
# 1、创建媒体播放器对象
self.mediaPlayer = QMediaPlayer()
# 2、创建音频播放对象
self.audioOutput = QAudioOutput()
# 3、设置播放音频的设备
self.mediaPlayer.setAudioOutput(self.audioOutput)
# 4、创建文件对话框
fileName, filter = QFileDialog.getOpenFileName(self, caption="选择音频文件", dir="./", filter="音频文件(*.wav *.flac)")
# 5、选择文件后更改标签的文本
self.label_open_file.setText(f"你选择了【{fileName}】音频文件")
# 6、重置为开始播放按钮
self.button_action.setText("开始播放")
# 7、设置媒体播放器对象的声源
self.mediaPlayer.setSource(QUrl.fromLocalFile(fileName))
# 8、设置媒体播放器对象的播放次数
self.mediaPlayer.setLoops(1)
# 9、设置音频播放对象是否静音
self.audioOutput.setMuted(False)
self.checkBox_mute.setCheckState(Qt.CheckState.Unchecked)
# 10、设置音量
self.slider_volume.setValue(80)
self.audioOutput.setVolume(0.8)
# 11、播放状态发生改变时发射信号
self.mediaPlayer.playbackStateChanged.connect(self.reset_play)
def action(self):
if self.mediaPlayer:
if self.button_action.text() == "开始播放":
# 开始播放
self.mediaPlayer.play()
# 重新设置按键文本为停止播放
self.button_action.setText("暂停播放")
elif self.button_action.text() == "暂停播放":
# 停止播放
self.mediaPlayer.pause()
# 重新设置按键文本为开始播放
self.button_action.setText("开始播放")
def stop(self):
if self.mediaPlayer:
# 1、媒体播放器停止播放
self.mediaPlayer.stop()
# 2、重置为开始播放按钮
self.button_action.setText("开始播放")
def mute(self, state):
if self.mediaPlayer:
if state:
# 设置音频播放对象静音
self.audioOutput.setMuted(True)
else:
# 设置音频播放对象不静音
self.audioOutput.setMuted(False)
def change_volume(self, value):
if self.mediaPlayer:
# 设置音量
self.audioOutput.setVolume(value / 100)
def reset_play(self, state):
if self.mediaPlayer:
if state == QMediaPlayer.PlaybackState.StoppedState:
self.button_action.setText("开始播放")
if __name__ == "__main__":
# 1、创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2、创建一个窗口
window = MyWidget()
# 3、展示窗口
window.show()
# 4、进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
QVideoWidget 类的常用方法如下:
# 实例方法
aspectRatioMode() -> Qt.AspectRatioMode # 获取长宽比模式
isFullScreen() -> bool # 获取是否全屏显示
# 槽方法
setAspectRatioMode(mode:Qt.AspectRatioMode) -> None # 设置长宽比模式
setFullScreen(fullScreen:bool) -> None # 设置全屏显示
QVideoWidget 类的常用方法如下:
aspectRatioModeChanged(mode:Qt.AspectRatioMode) # 长宽比模式发生改变时发射信号
fullScreenChanged(fullScreen:bool) # 全屏状态发生改变时发射信号
QGraphicsVideoItem 类的常用方法如下:
setAspectRatioMode(mode:Qt.AspectRatioMode) -> None # 设置长宽比模式
aspectRatioMode() -> Qt.AspectRatioMode # 获取长宽比模式
setOffset(offset:Union[QSize, QSizeF]) -> None # 设置偏移量
offset() -> QPointF # 获取偏移量
setSize(size:Union[QSize, QSizeF]) -> None # 设置尺寸
size() -> QSizeF # 获取尺寸
QGraphicsVideoItem 类的常用方法如下:
nativeSizeChanged(size:QSizeF) # 尺寸发生改变时发射信号
其中,用 setAspectRatioMode(mode:Qt.AspectRatioMode)
方法设置视频控件所播放视频的长宽比模式,参数 mode 可取值如下:
Qt.AspectRatioMode.IgnoreAspectRatio # 不保持比例关系
Qt.AspectRatioMode.KeepAspectRatio # 保持原比例关系
Qt.AspectRatioMode.KeepAspectRatioByExpanding # 通过扩充保持原比例关系
import sys
from PySide6.QtWidgets import QApplication, QWidget
from PySide6.QtWidgets import QLabel, QPushButton, QCheckBox, QSlider
from PySide6.QtWidgets import QVBoxLayout, QHBoxLayout, QFormLayout
from PySide6.QtWidgets import QFileDialog
from PySide6.QtCore import QUrl, Qt
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput
from PySide6.QtMultimediaWidgets import QVideoWidget, QGraphicsVideoItem
class MyWidget(QWidget):
def __init__(self):
# 1、调用父类的__init__()方法
super().__init__()
self.mediaPlayer = None
self.setup_ui()
def setup_ui(self):
# 1、设置窗口对象大小
self.resize(700, 500)
v_layout = QVBoxLayout(self)
self.label_open_file = QLabel("未选择文件")
v_layout.addWidget(self.label_open_file)
# 2、创建视频播放对象
self.videoWidget = QVideoWidget()
v_layout.addWidget(self.videoWidget)
form_layout = QFormLayout()
v_layout.addLayout(form_layout)
self.label_volume = QLabel("音量:")
self.slider_volume = QSlider()
# 设置音量滑块的布局
self.slider_volume.setOrientation(Qt.Orientation.Horizontal)
# 设置音量滑块的范围
self.slider_volume.setRange(0, 100)
form_layout.addRow(self.label_volume, self.slider_volume)
self.slider_volume.valueChanged.connect(self.change_volume)
h_layout = QHBoxLayout()
v_layout.addLayout(h_layout)
self.button_open_file = QPushButton("选择视频文件")
self.button_open_file.clicked.connect(self.open_file)
h_layout.addWidget(self.button_open_file)
self.button_action = QPushButton("开始播放")
h_layout.addWidget(self.button_action)
self.button_action.clicked.connect(self.action)
self.button_stop = QPushButton("停止播放")
h_layout.addWidget(self.button_stop)
self.button_stop.clicked.connect(self.stop)
self.checkBox_mute = QCheckBox("是否静音")
h_layout.addWidget(self.checkBox_mute)
# 没有不确定状态
self.checkBox_mute.setTristate(False)
self.checkBox_mute.stateChanged.connect(self.mute)
def open_file(self):
# 1、创建媒体播放器对象对象
self.mediaPlayer = QMediaPlayer()
# 2、创建音频播放对象
self.audioOutput = QAudioOutput()
# 3、设置播放音频的设备
self.mediaPlayer.setAudioOutput(self.audioOutput)
# 4、设置播放视频的设备
self.mediaPlayer.setVideoOutput(self.videoWidget)
# 5、创建文件对话框
fileName, filter = QFileDialog.getOpenFileName(self, caption="选择视频文件", dir="./", filter="音频文件(*.wav *.flac);;视频文件(*.avi)")
# 6、选择文件后更改标签的文本
self.label_open_file.setText(f"你选择了【{fileName}】视频文件")
# 7、重置为开始播放按钮
self.button_action.setText("开始播放")
# 8、设置音频播放对象的声源
self.mediaPlayer.setSource(QUrl.fromLocalFile(fileName))
# 9、设置音频播放对象的播放次数
self.mediaPlayer.setLoops(1)
# 10、设置音频播放对象不静音
self.checkBox_mute.setCheckState(Qt.CheckState.Unchecked)
self.audioOutput.setMuted(False)
# 11、设置音量
self.slider_volume.setValue(80)
self.audioOutput.setVolume(0.8)
# 12、设置视频控件所播放视频的长宽比模式
self.videoWidget.setAspectRatioMode(Qt.AspectRatioMode.KeepAspectRatioByExpanding)
# 13、播放状态发生改变时发射信号
self.mediaPlayer.playbackStateChanged.connect(self.reset_play)
def action(self):
if self.mediaPlayer:
if self.button_action.text() == "开始播放":
# 开始播放
self.mediaPlayer.play()
# 重新设置按键文本为停止播放
self.button_action.setText("暂停播放")
elif self.button_action.text() == "暂停播放":
# 停止播放
self.mediaPlayer.pause()
# 重新设置按键文本为开始播放
self.button_action.setText("开始播放")
def stop(self):
if self.mediaPlayer:
# 1、媒体播放器停止播放
self.mediaPlayer.stop()
# 2、重置为开始播放按钮
self.button_action.setText("开始播放")
def mute(self, state):
if self.mediaPlayer:
if state:
# 设置音频播放对象静音
self.audioOutput.setMuted(True)
else:
# 设置音频播放对象不静音
self.audioOutput.setMuted(False)
def change_volume(self, value):
if self.mediaPlayer:
# 设置音量
self.audioOutput.setVolume(value / 100)
def reset_play(self, state):
if self.mediaPlayer:
if state == QMediaPlayer.PlaybackState.StoppedState:
self.button_action.setText("开始播放")
if __name__ == "__main__":
# 1、创建一个QApplication类的实例
app = QApplication(sys.argv)
# 2、创建一个窗口
window = MyWidget()
# 3、展示窗口
window.show()
# 4、进入程序的主循环并通过exit()函数确保主循环安全结束
sys.exit(app.exec())
标签:layout,媒体,33,self,QMediaPlayer,操作,播放,button,音频
From: https://www.cnblogs.com/FlurryHeart/p/18684280