1

I am trying to build a GUI using PySide6 on Windows 10 - Python V 3.10.2.

Basically, I wanted to create a vertical box on left with buttons to switch between the stacked widgets. And a video widget with play button & scroll bar on the right side with a stacked widget underneath the video widget. On the stacked widget, I intend to put some buttons which will link files to play on the video widget. The Problem: The video widget does works perfectly when commenting out the stacked widget. However, if I add the stacked widget, sound does play nicely but the videowidget can't be seen. See the code snippet below.

class mainwindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.audio = QAudioOutput()
        self.video = QVideoWidget()
        self.player = QMediaPlayer()
        self.player.setAudioOutput(self.audio)
        self.player.setVideoOutput(self.video)
        
        
        side_layout = QVBoxLayout()
        side_layout.addWidget(QLabel('First Label'))
        side_layout.addWidget(QPushButton('First Button'))
        # I have not named buttons for now for conciseness.
        
        vid_control_layout = QHBoxLayout()
        
        play_btn = QPushButton('Play')
        play_btn.clicked.connect(self.play_video)
        vid_control_layout.addWidget(play_btn)
        vid_control_layout.addWidget(QSlider(orientation = Qt.Horizontal))
        
        stack_widget = QStackedWidget()
        stack_widget.addWidget(QWidget())
        stack_widget.addWidget(QWidget())
        
        video_layout = QVBoxLayout()
        video_layout.addWidget(self.video)
        video_layout.addLayout(vid_control_layout)
        video_layout.addWidget(stack_widget)        
        
        mainlayout = QHBoxLayout()
        mainlayout.addLayout(side_layout)
        mainlayout.addLayout(video_layout)
        
        mainwidget = QWidget()
        mainwidget.setLayout(mainlayout)
        
        self.setCentralWidget(mainwidget)
        
    def play_video(self):
        self.player.setSource('111.mp4')
        self.player.play()


app = QApplication(sys.argv)
win = mainwindow()
win.show()
sys.exit(app.exec())

I am a self learner of Python and started learning PyQt5 quite recently. As there was too many version problem in PyQt5 and QMediaPlayer, I switched to PySide6.

Let me know if this detail will help in fixing the problem.

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Roshan
  • 11
  • 1
  • 1
    It seems that QVideoWidget doesn't have a minimum size hint in Qt6. Use `video_layout.addWidget(self.video, stretch=1)`, then go through the Qt6 documentation to check for signals related to video size changes. And, in any case, remember that QtMultimedia was reintroduced in Qt6 after being almost completely rewritten, so it can't be really considered stable yet. – musicamante Mar 24 '22 at 23:52

0 Answers0