I’m trying to make the QGraphicsScene max size to be the video size so if I have text and drag it to anywhere that the video is not the text won’t appear and it won’t show scroll bars. The scene for some reason still uses all the view space, even though I set its rect to be the same as the video.
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):
self.scene.setSceneRect(self.video_widget.boundingRect())
self.view.setSceneRect(0, 0, self.scene.sceneRect().width(), self.scene.sceneRect().height())
self.view.fitInView(self.scene.sceneRect(), Qt.KeepAspectRatio)
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_())