Как загрузить путь в QtVideoWigdet - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть вопрос в pyqt5. Я хочу сделать видеоплеер. Теперь я застрял в том, что, как я могу дать им полный путь, чтобы не нажимать на кнопку и go, чтобы указать путь и выбрать видео, я просто хочу, чтобы это был один путь к файлу. Пожалуйста, посмотрите на мой код. Я сделал это как для raspberry pi, так и для окна

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

при использовании этого кода, который находится в официальной документации. эта ошибка произошла.

error

1 Ответ

1 голос
/ 18 февраля 2020

Как указывают ошибки и документы, 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_())
...