子元素大小改变后缩小父元素的尺寸

3 投票
1 回答
2504 浏览
提问于 2025-04-16 18:33

如果其中一个子元素的高度发生变化,我该如何让所有的控件都缩小呢?
当新的高度变大时,它们会扩展,但如果变小就不会缩小。

我试过使用 updateGeometry(),但是没有任何变化。

这里有个例子,当子元素缩小时,父元素的高度没有变化:
在这里输入图片描述

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

你应该在你的“顶层”窗口上调用 adjustSize() 方法(在这个例子中就是你的 MainWindow)。

如果你的布局比这个例子复杂,你需要自己把这个调用传递到更高层的窗口。用C++的话,你可以这样做:

QWidget *w = <the widget you resized>->parentWidget();
while (w) {
  w->adjustSize();
  w = w->parentWidget();
}

撰写回答