PyQt5 - откройте QMediaplayer в новом окне и воспроизведите видео

Это, вероятно, сводится к базовому пониманию Python, но я пытаюсь открыть видео в новом окне, используя PyQt5 и Python3.

Когда я запускаю этот код:

from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import  QApplication
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
import sys

app = QApplication(sys.argv)
w = QVideoWidget()
w.resize(300, 300)
w.move(0, 0)
w.show()
player = QMediaPlayer()
player.setMedia(QMediaContent(QUrl.fromLocalFile({inputVideo})))
player.setVideoOutput(w)
player.play()
sys.exit(app.exec_())

откроется окно и воспроизведет видеофайл.

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

Чего я хочу добиться - это нажать кнопку QPush из основного графического интерфейса, чтобы открыть новое окно и воспроизвести видео в этом новом окне.

Как я уже сказал, это, вероятно, базовое кодирование на Python, но я думаю, что я еще не там.

Ваша помощь очень ценится! Спасибо!

1 ответ

Решение

Вы должны построить QPushButton а также connect его clicked слот для функции, которая показывает и воспроизводит ваше видео.

(Ты должен setVideoOutput до тебя setMedia)

from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QPushButton
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer
import sys

class VideoPlayer:

    def __init__(self):
        self.video = QVideoWidget()
        self.video.resize(300, 300)
        self.video.move(0, 0)
        self.player = QMediaPlayer()
        self.player.setVideoOutput(self.video)
        self.player.setMedia(QMediaContent(QUrl.fromLocalFile("./some_video_file.avi")))

    def callback(self):
        self.player.setPosition(0) # to start at the beginning of the video every time
        self.video.show()
        self.player.play()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    v = VideoPlayer()
    b = QPushButton('start')
    b.clicked.connect(v.callback)
    b.show()
    sys.exit(app.exec_())
Другие вопросы по тегам