Видео все еще не помещается в QGraphicsView - PullRequest
0 голосов
/ 27 мая 2020

Я попытался адаптировать / понять, как этот топи c может помочь мне с моим видео, которое не помещается должным образом в моем QGraphicsView, но безуспешно. Я попытался использовать fitInView и переопределить resizeEvent:

import os
from PyQt5 import QtCore, QtGui, QtWidgets, QtMultimedia, QtMultimediaWidgets

class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        self._scene = QtWidgets.QGraphicsScene(self)
        self._gv = QtWidgets.QGraphicsView(self._scene)

        self._videoitem = QtMultimediaWidgets.QGraphicsVideoItem()
        self._scene.addItem(self._videoitem)

        self._player = QtMultimedia.QMediaPlayer(self, 
                                                 QtMultimedia.QMediaPlayer.VideoSurface)
        self._player.stateChanged.connect(self.on_stateChanged)
        self._player.setVideoOutput(self._videoitem)

        file =  os.path.join("IMG_0479.MOV")
        self._player.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(file)))
        button = QtWidgets.QPushButton("Play")
        button.clicked.connect(self._player.play)

        self.resize(640, 480)
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self._gv)
        lay.addWidget(button)



    @QtCore.pyqtSlot(QtMultimedia.QMediaPlayer.State)
    def on_stateChanged(self, state):
        if state == QtMultimedia.QMediaPlayer.PlayingState:
            self._gv.fitInView(self._videoitem, QtCore.Qt.KeepAspectRatio)

    def resizeEvent(self, event):
        bounds = QtCore.QRectF(self._scene.sceneRect())
        self._gv.fitInView(bounds, QtCore.Qt.KeepAspectRatio)
        self._gv.centerOn(bounds.center())

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

Я немного потерял / запутался, что нужно сделать здесь, чтобы видео полностью отображалось в QGraphicsView / Scene.

[РЕДАКТИРОВАТЬ] Я изменил resizeEvent, и теперь видео отображается в полном виде ПОСЛЕ того, как я изменяю размер окна вручную. Однако даже после изменения размера видео все равно кадрируется по сравнению с исходным.

Перед изменением размера окна: enter image description here

После изменения размера окна: enter image description here

Исходное видео с использованием QuickTime: enter image description here

[EDIT2] Вот ссылка на видео (я немного обрезал .. . Видео.MOV

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...