уменьшать родительские виджеты после изменения размера - PullRequest
3 голосов
/ 29 мая 2011

Как я могу уменьшить размеры всех виджетов, если один из их детей изменил рост?
Они расширяются, если новая высота больше, но не уменьшаются, если меньше.

Я пытался updateGeometry(), но ничего не изменилось.

Вот пример, после того, как дочерний элемент shran, рост родителей не меняется:
enter image description here

import sys
from PyQt4.QtGui import *

class MainWindow(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

        # inner widget
        self.widget = QGroupBox('inner')
        vbox_inner = QVBoxLayout(self.widget)

        button1 = QPushButton('100')
        button1.clicked.connect(lambda: self.change_height(100))
        vbox_inner.addWidget(button1)
        button2 = QPushButton('200')
        button2.clicked.connect(lambda: self.change_height(200))
        vbox_inner.addWidget(button2)

        # outer layout
        vbox = QVBoxLayout(self)
        vbox.addWidget(self.widget)

    # resizing element
    def change_height(self, height):
        self.widget.setFixedHeight(height)


app = QApplication(sys.argv)
myapp = MainWindow()
myapp.show()
sys.exit(app.exec_())

Есть ли способ настроить все родительские виджеты?

ответ на Python:

widget = self.parent()
while widget:
    widget.adjustSize()
    widget = widget.parent()

1 Ответ

7 голосов
/ 29 мая 2011

Вы должны вызвать метод adjustSize() в виджете "верхнего уровня" (в данном случае ваш MainWindow).

Вам нужно будет распространить этот вызов иерархии виджетов самостоятельно для более сложных макетов, чем ваш образец. В C ++ вы можете сделать что-то вроде этого:

QWidget *w = <the widget you resized>->parentWidget();
while (w) {
  w->adjustSize();
  w = w->parentWidget();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...