Я пытаюсь сделать вид того же размера, что и видео, но при этом разрешить ему изменять размер, чтобы заполнить доступную область. Я не уверен, правильно ли я делаю, устанавливая максимальный размер, но это вроде как работает , проблема в том, что видео не начинается с максимально возможного размера, и мне приходится постоянно изменять размер окна, чтобы его можно было просмотреть.
Хороший пример того, что я делаю. пытаюсь создать видеоредактор, такой как 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
Размер PyQt QGraphicsView должен быть таким же, как у QGraphicsVideoItem. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение