Адаптивное видео в Qwidget

avatar
collinet aurele
1 июля 2021 в 15:48
30
0
0

у меня есть этот код в гораздо большем пользовательском интерфейсе, мне нужно отобразить видео в виджете миниатюр, класс справа ниже, моя проблема в том, что виджет и видео вообще не реагируют, если я попытаюсь изменить размер панель видео сжимается или исчезает без изменения размера

from PySide2.QtCore import QUrl, QEvent
from PySide2.QtMultimedia import QMediaContent, QMediaPlayer
from PySide2.QtMultimediaWidgets import QVideoWidget
from PySide2.QtWidgets import  QHBoxLayout, QVBoxLayout, QWidget
from PySide2.QtWidgets import QWidget

class Thumbnail(QWidget):


 """
    Thumbnail Video thumbnail view
    """

    def __init__(self, parent=None):
        super(Thumbnail, self).__init__(parent)

        self.VideoWidget = QVideoWidget()

        self.player = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.player.setMedia(QMediaContent(QUrl.fromLocalFile(r"video.mov")))
        self.player.play()
        self.player.setVideoOutput(self.VideoWidget)

        self.v_layout = QVBoxLayout()


        controlLayout = QHBoxLayout()
        controlLayout.setContentsMargins(0, 0, 0, 0)

        self.v_layout.addWidget(self.VideoWidget)
        self.v_layout.addLayout(controlLayout)

        self.setLayout(self.v_layout)

        self.v_layout.addWidget(self.VideoWidget)

    def setPixmap(self, blaba):
        pass

    def event(self, e):
        if e.type() == QEvent.Resize:
            self.updateGeometry()
            self.VideoWidget.updateGeometry()
        return super(Thumbnail, self).event(e)

Я добавлю ссылку на очень большую часть пользовательского интерфейса

class BrowserWidget(QtWidgets.QWidget, browser_widget_ui.Ui_Form):

    def __init__(self, parent=None):

        # load Qt settings
        self.currentEntityType = "Assets"
        self.settings = QtCore.QSettings(config.SETTINGS_ORG, config.SETTINGS_APP)
        self.settings.beginGroup(self.APP)
        self.current_entity = None
        super(BrowserWidget, self).__init__(parent)
        self.setupUi(self)


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(999, 685)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout(Form)
        self.wgt_infos = QtWidgets.QWidget(self.splitter_main)
        self.wgt_infos.setObjectName("wgt_infos")
        self.wgt_infos.setMaximumSize(QtCore.QSize(800, 16777215))
        self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.wgt_infos)
        self.verticalLayout_11.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_11.setObjectName("verticalLayout_11")

        self.splitter_infos = QtWidgets.QSplitter(self.wgt_infos)
        self.splitter_infos.setOrientation(QtCore.Qt.Vertical)
        self.splitter_infos.setObjectName("splitter_infos")
        self.thumbnail = Thumbnail(self.splitter_infos)
        self.thumbnail.setObjectName("thumbnail")

        self.wgt_infos = QtWidgets.QWidget(self.splitter_main)
        self.wgt_infos.setObjectName("wgt_infos")
        self.wgt_infos.setMaximumSize(QtCore.QSize(800, 16777215))
        self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.wgt_infos)
        self.verticalLayout_11.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_11.setObjectName("verticalLayout_11")

        self.splitter_infos = QtWidgets.QSplitter(self.wgt_infos)
        self.splitter_infos.setOrientation(QtCore.Qt.Vertical)
        self.splitter_infos.setObjectName("splitter_infos")
        self.thumbnail = Thumbnail(self.splitter_infos)
        self.thumbnail.setObjectName("thumbnail")


def main():

    app = QtWidgets.QApplication.instance() or QtWidgets.QApplication([])
    app.setStyle("plastique")
    p = QtGui.QPalette()
    p.setColor(QtGui.QPalette.Highlight, QtGui.QColor("#696969"))
    app.setPalette(p)
    bank = BrowserWidget()
    bank.show()
    app.exec_()


main()

Есть ли у вас какие-либо предложения о том, как я могу это сделать?

Источник
musicamante
1 июля 2021 в 16:47
0

Извините, но вашего кода недостаточно для понимания проблемы, так как в нем отсутствуют важные части макета окна. Также не следует вызывать start() на медиаплеере до настройки видеовыхода (и добавления его в макет).

Ответы (0)