首页 > 解决方案 > 如何在 QtVideoWigdet 中加载路径

问题描述

我在pyqt5中有一个问题。我想做一个视频播放器。现在我被困住了,我怎样才能给他们完整的路径而不是单击按钮并转到路径并选择我只想要这个文件路径的视频。请看一下我的代码。我为树莓派和窗口做这个

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_VideoWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(733, 505)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Video_Widget = QVideoWidget(self.centralwidget)
        self.Video_Widget.setGeometry(QtCore.QRect(0, 0, 711, 361))
        self.Video_Widget.setObjectName("Video_Widget")
        self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
        self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 380, 721, 16))
        self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalScrollBar.setObjectName("horizontalScrollBar")
        self.play = QtWidgets.QPushButton(self.centralwidget)
        self.play.setGeometry(QtCore.QRect(10, 410, 75, 23))
        self.play.setObjectName("play")
        self.select = QtWidgets.QPushButton(self.centralwidget)
        self.select.setGeometry(QtCore.QRect(550, 410, 75, 23))
        self.select.setObjectName("select")

        self.play.clicked.connect(self.load_video)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def load_video(self):
        filepath = 'F:/Fun/Songs/12.mp4'   
        self.Video_Widget.load(filepath)
        self.horizontalScrollBar.setMediaObject(self.Video_Widget.mediaObject())
        self.Video_Widget.play()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.play.setText(_translate("MainWindow", "play"))
        self.select.setText(_translate("MainWindow", "Select"))
from PyQt5.QtMultimediaWidgets import QVideoWidget


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_VideoWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我也使用了官方文档中的这段代码。

 def load_video(self):
    player = QMediaPlayer()
    playlist = QMediaPlaylist(player)
    playlist.addMedia(QUrl('F:/Fun/Songs/12.mp4'))
    player.setVideoOutput(self.Video_Widget)
    self.Video_Widget.show()
    playlist.setCurrentIndex(1)
    player.play()

在使用官方文档中的此代码时。发生此错误。

错误

标签: pythonpyqtpyqt5raspberry-pi3

解决方案


正如错误和文档指出的那样,必须将 QMediaContent 传递给 addMedia 方法。要构建 QMediaContent,您可以使用 QUrl:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_VideoWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(733, 505)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.Video_Widget = QVideoWidget(self.centralwidget)
        self.Video_Widget.setGeometry(QtCore.QRect(0, 0, 711, 361))
        self.Video_Widget.setObjectName("Video_Widget")
        self.horizontalScrollBar = QtWidgets.QScrollBar(self.centralwidget)
        self.horizontalScrollBar.setGeometry(QtCore.QRect(0, 380, 721, 16))
        self.horizontalScrollBar.setOrientation(QtCore.Qt.Horizontal)
        self.horizontalScrollBar.setObjectName("horizontalScrollBar")
        self.play = QtWidgets.QPushButton(self.centralwidget)
        self.play.setGeometry(QtCore.QRect(10, 410, 75, 23))
        self.play.setObjectName("play")
        self.select = QtWidgets.QPushButton(self.centralwidget)
        self.select.setGeometry(QtCore.QRect(550, 410, 75, 23))
        self.select.setObjectName("select")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.play.setText(_translate("MainWindow", "play"))
        self.select.setText(_translate("MainWindow", "Select"))


from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5 import QtMultimedia


class VideoWindow(QtWidgets.QMainWindow, Ui_VideoWindow):
    def __init__(self, parent=None):
        super(VideoWindow, self).__init__(parent)
        self.setupUi(self)
        self.player = QtMultimedia.QMediaPlayer(self)
        self.player.setVideoOutput(self.Video_Widget)
        self.play.clicked.connect(self.player.play)
        self.playlist = QtMultimedia.QMediaPlaylist(self.player)
        self.player.setPlaylist(self.playlist)
        self.playlist.addMedia(
            QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile("F:/Fun/Songs/12.mp4"))
        )
        self.playlist.setCurrentIndex(0)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = VideoWindow()
    w.show()
    sys.exit(app.exec_())

推荐阅读