Я попытался адаптировать / понять, как этот топи 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, и теперь видео отображается в полном виде ПОСЛЕ того, как я изменяю размер окна вручную. Однако даже после изменения размера видео все равно кадрируется по сравнению с исходным.
Перед изменением размера окна:
После изменения размера окна:
Исходное видео с использованием QuickTime:
[EDIT2] Вот ссылка на видео (я немного обрезал .. . Видео.MOV