Увеличение/уменьшение высоты главного окна, когда надо показывать/прятать некоторый виджет
У меня задача, при старте программы виджет 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 шт):
Чтобы получать быстрые и правильные ответы, вы должны предоставлять минимально-воспроизводимый пример, который демонстрирует проблему.
И хорошо рассказать, что вы хотите сделать и что у вас не получается.
Я не уверен, что правильно понимаю то, что вы хотите сделать.
Как вариант, то что я понял, может выглядеть примерно так:
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_())

