前言
最近在学习pytq5的QMediaPlayer模块,其实刚开始是学习的pyside6的,因为pyside6的官方文档相对较详细一些,pyqt5的官方文档大片的文档解释都是TODO,我不太明白这种句式,但是做到添加播放列表QMediaPlaylist的时候,pyside6无法识别这个模块,我很疑惑,查了才发现现在Qt6的QtMultimedia相对与Qt5有较大重写,现在还有很多模块没有补齐,Qt6改动。后面有稍稍改了一下代码,改用pyqt5.
我遇到的一些pyqt6变化
- pyside6需要额外setAudioOutput()给视频连接音频的,否者视频播放出来没有声音。
- pyside6的设置音量大小的范围是0-1,是float型,而pyqt5的音量的大小范围是0-100,是int型,
- pyside6对中文路径不是很支持,文件名是中文都播放不了,此外pyside6的转换.ui文件出来的.py文件,其中的中文也会被改成字母字符,但是你运行出来窗口还是显示中文,比如你在designer中设置button的名字为“确定”,转化的.py文件中会变成一串字母,但是窗口是正常显示,pyqt5不会出现这种情况,
- pyside6读取媒体文件是self.player.setSource(QUrl),而pyqt5读取媒体文件时self.player.setMedal(QMediaContent),pyqt5获取url好像中间转了一下,不知道是不是这个原因,我用pyside6打开播放文件很顺畅,而pyqt5刚打开屏幕会闪一下,建议如果要做桌面动态壁纸的可以用pyside6,动态壁纸闪一下真的很影响感觉。
准备工作
- 安装pyqt5库
- 安装解码器,LAV Filters
没有实现重要功能
- 不能全屏
- 不能删除播放列表的文件
界面文件
图里面的需要的功能都完成,打开文件分两种的一种是添加单个或者多个文件,另一个是添加文件夹下面的所有文件(不过还没加检索,如果含有其他.txt .py文件也会一股脑添加到播放列表),此外没给控件设置样式,所以有点粗犷简陋。
如果要自己通过designer设计,需要记得添加一个Qwidget控件提升为QVideoWidget。
提升的类叫QVideoWidget,头文件:PyQt5.QtMultimediaWidgets
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(623, 446)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
self.verticalLayout.setSpacing(0)
self.verticalLayout.setObjectName("verticalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setHorizontalSpacing(6)
self.gridLayout.setObjectName("gridLayout")
self.nowtime = QtWidgets.QLabel(self.centralwidget)
self.nowtime.setText("")
self.nowtime.setObjectName("nowtime")
self.gridLayout.addWidget(self.nowtime, 2, 4, 1, 1)
self.playlistBox = QtWidgets.QComboBox(self.centralwidget)
self.playlistBox.setObjectName("playlistBox")
self.playlistBox.addItem("")
self.playlistBox.addItem("")
self.playlistBox.addItem("")
self.gridLayout.addWidget(self.playlistBox, 1, 4, 1, 1)
self.play_button = QtWidgets.QPushButton(self.centralwidget)
self.play_button.setObjectName("play_button")
self.gridLayout.addWidget(self.play_button, 3, 0, 1, 1)
self.videoout = QVideoWidget(self.centralwidget)
self.videoout.setEnabled(True)
self.videoout.setObjectName("videoout")
self.gridLayout.addWidget(self.videoout, 0, 0, 2, 4)
self.mid_button = QtWidgets.QPushButton(self.centralwidget)
self.mid_button.setObjectName("mid_button")
self.gridLayout.addWidget(self.mid_button, 3, 2, 1, 1)
self.timeSlider = QtWidgets.QSlider(self.centralwidget)
self.timeSlider.setEnabled(True)
self.timeSlider.setMaximum(99)
self.timeSlider.setOrientation(QtCore.Qt.Horizontal)
self.timeSlider.setObjectName("timeSlider")
self.gridLayout.addWidget(self.timeSlider, 2, 0, 1, 4)
self.volumeSlider = QtWidgets.QSlider(self.centralwidget)
self.volumeSlider.setEnabled(True)
self.volumeSlider.setOrientation(QtCore.Qt.Vertical)
self.volumeSlider.setObjectName("volumeSlider")
self.gridLayout.addWidget(self.volumeSlider, 1, 5, 2, 2)
self.volume = QtWidgets.QLabel(self.centralwidget)
self.volume.setObjectName("volume")
self.gridLayout.addWidget(self.volume, 3, 5, 1, 2)
self.listvidename = QtWidgets.QListWidget(self.centralwidget)
self.listvidename.setObjectName("listvidename")
self.gridLayout