Размер 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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