如果他们的一个孩子改变了身高,我怎么能让所有小部件缩小?
如果新的高度更大,它们会扩展,但如果更小,则不会缩小.
我试过了updateGeometry(),但没有改变.
这是一个例子,在子元素shran之后,父母的身高不会改变:
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_())
Run Code Online (Sandbox Code Playgroud)
有没有办法调整所有父母的小部件?
用Python 回答:
widget = self.parent()
while widget:
widget.adjustSize()
widget = widget.parent()
Run Code Online (Sandbox Code Playgroud)
你应该adjustSize()在你的"toplevel"小部件上调用这个方法(MainWindow在这种情况下你的).
您需要自己在窗口小部件层次结构中传播该调用,以获得比样本更复杂的布局.在C++中,你可以这样做:
QWidget *w = <the widget you resized>->parentWidget();
while (w) {
w->adjustSize();
w = w->parentWidget();
}
Run Code Online (Sandbox Code Playgroud)