Увеличение/уменьшение высоты главного окна, когда надо показывать/прятать некоторый виджет

У меня задача, при старте программы виджет groupBox_3 скрыт и окно уменьшается обрезая поле с ним.
При нажатии на кнопку "Show", виджет groupBox_3 становится видимым, тем самым увеличивая окно и при повторном нажатии скрывается и вновь уменьшая высоту.

Все работает, но при повторном скрытии окно не уменьшается по высоте.
Предполагаю, что это из-за того, что объекты скомпонованы по сетке, но не уверен.

Как мне решить эту проблему, либо есть более действенный или верный метод реализации? Заранее спасибо.


...

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.groupBox_3.hide()
        self.hide_height = None
        self.show_height = self.height()
        self.resize(self.width(), 255)


        self.pushButton.clicked.connect(self.show_window)

    def show_window(self):
        if self.pushButton.text() == "Show":
            self.hide_height = self.height()
            self.pushButton.setText("Hide")
            self.groupBox_3.show()
            # self.resize(self.width(), self.show_height)
            self.setGeometry(self.x(), self.y(), self.width(), self.show_height)
        else:
            self.show_height = self.height()
            self.pushButton.setText("Show")
            self.groupBox_3.hide()
            # self.resize(self.width(), self.hide_height)
            self.setGeometry(self.x(), self.y(), self.width(), self.hide_height)

...

Ответы (1 шт):

Автор решения: S. Nick

Чтобы получать быстрые и правильные ответы, вы должны предоставлять минимально-воспроизводимый пример, который демонстрирует проблему.
И хорошо рассказать, что вы хотите сделать и что у вас не получается.

Я не уверен, что правильно понимаю то, что вы хотите сделать.
Как вариант, то что я понял, может выглядеть примерно так:

import sys
from PyQt5 import QtWidgets, QtGui, QtCore 
from PyQt5.Qt import *


class GroupBox(QtWidgets.QGroupBox):
    def __init__(self, *args, **kwargs):
        super(GroupBox, self).__init__(*args, **kwargs)
        self.setMinimumWidth(450)
        self.setMinimumHeight(150)
        

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.centralWidget = QWidget()
        self.setCentralWidget(self.centralWidget) 

        self.pushButton = QPushButton("Hide") 
        self.pushButton.clicked.connect(self.pb_clicked)

        self.frame = QFrame()
        layoutV = QVBoxLayout(self.frame)
        layoutV.addWidget(self.create_groupBox_1())
        layoutV.addWidget(self.create_groupBox_2())
        layoutV.addWidget(self.create_groupBox_3())
        
        layout = QHBoxLayout(self.centralWidget)
        layout.addWidget(self.frame)
        layout.addWidget(self.pushButton)
        
        self.pb_clicked()

    def create_groupBox_1(self):
        groupBox_1 = GroupBox(self, title="group1")
        groupBox_1.setStyleSheet(
            'background-color: #8C00D9; color: #fff;')
        grid = QGridLayout(groupBox_1)
        grid.addWidget(QLineEdit(), 0, 0)
        return groupBox_1        

    def create_groupBox_2(self):
        groupBox_2 = GroupBox(self)
        groupBox_2.setTitle("group2")
        groupBox_2.setStyleSheet(
            'background-color: #008CD9; color: #fff;')
        grid = QGridLayout(groupBox_2)
        grid.addWidget(QLineEdit('2'), 0, 0)
        return groupBox_2 
        
    def create_groupBox_3(self):
        self.groupBox_3 = GroupBox(self)
        self.groupBox_3.setTitle("group3")
        self.groupBox_3.setStyleSheet(
            'background-color: #D98C00; color: #fff;')
        grid = QGridLayout(self.groupBox_3)
        grid.addWidget(QLineEdit('333'), 0, 0)
        return self.groupBox_3 
        
    def pb_clicked(self):
        if self.pushButton.text() == "Show":
            self.groupBox_3.show()
            self.pushButton.setText("Hide")
        else:
            self.groupBox_3.hide()
            self.pushButton.setText("Show")
            self.resize(self.groupBox_3.size() * 2)            
        self.adjustSize()    


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка