Search code examples
pythonpyqtpyqt5raspberry-pi3

How to load a path in QtVideoWigdet


I have a question in pyqt5. I want to make a Videoplayer. now I'm stuck that how can I gave them complete path it not to click on the button and go to path and select the video I just want that it this one file path. Please have a look to my code. I making this for both raspberry pi and window

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_())

I used this code too which is present in official documentation.

 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()

while using this code which is in official documentation. this error occurred.

error


Solution

  • As the error and the docs point out, a QMediaContent must be passed to the addMedia method. To build a QMediaContent you can use a 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_())