Размер PyQt QGraphicsView должен быть таким же, как у QGraphicsVideoItem.Python

Программы на Python
Anonymous
Размер PyQt QGraphicsView должен быть таким же, как у QGraphicsVideoItem.

Сообщение Anonymous »

Я пытаюсь сделать вид того же размера, что и видео, но при этом разрешить ему изменять размер, чтобы заполнить доступную область. Я не уверен, правильно ли я делаю, устанавливая максимальный размер, но это вроде как работает , проблема в том, что видео не начинается с максимально возможного размера, и мне приходится постоянно изменять размер окна, чтобы его можно было просмотреть.
Хороший пример того, что я делаю. пытаюсь создать видеоредактор, такой как Premiere Pro, где размер видео определяет размер сцены/просмотра.
import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtGui import QResizeEvent, QShowEvent
from PySide6.QtWidgets import *
from PySide6.QtMultimediaWidgets import QGraphicsVideoItem
from PySide6.QtMultimedia import QMediaPlayer, QAudioOutput, QMediaMetaData

class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()

def initUI(self):
self.scene = QGraphicsScene()
self.view = QGraphicsView(self.scene)

self.video_widget = QGraphicsVideoItem()

self.scene.addItem(self.video_widget)

self.mediaPlayer = QMediaPlayer()
self.mediaPlayer.setVideoOutput(self.video_widget)

self.mediaPlayer.setSource(QUrl.fromLocalFile("potrait.mp4"))
self.video_widget.setSize(self.mediaPlayer.videoSink().videoSize())

self.text = QGraphicsTextItem("test")
self.text.setFlags(QGraphicsTextItem.ItemIsSelectable | QGraphicsTextItem.ItemIsMovable |
QGraphicsTextItem.ItemIsFocusable)

font = QFont()
font.setPointSize(100)
self.text.setFont(font)
self.scene.addItem(self.text)

layout = QVBoxLayout(self)
layout.addWidget(self.view)

self.setLayout(layout)

self.view.setScene(self.scene)

self.mediaPlayer.play()

def resizeFunc(self):
# Fit the view in the scene while keeping the aspect ratio
self.view.fitInView(self.scene.sceneRect(), Qt.KeepAspectRatio)

# Adjust maximum size of the view based on the size of the
video_item_width_view = self.view.mapFromScene(self.video_widget.sceneBoundingRect().topRight()).x() - self.video_widget.sceneBoundingRect().topLeft().x()
video_item_height_view = self.view.mapFromScene(self.video_widget.sceneBoundingRect().bottomLeft()).y() - self.video_widget.sceneBoundingRect().topLeft().y()

self.view.setMaximumSize(video_item_width_view + 10, video_item_height_view + 10)
print(video_item_width_view, video_item_height_view)

def resizeEvent(self, event):
self.resizeFunc()

def showEvent(self, event):
self.resizeFunc()

if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())



Подробнее здесь: https://stackoverflow.com/questions/783 ... svideoitem

Вернуться в «Python»