我正在使用QMainWindow
的子类,其中我声明了一个中心小部件。此小部件包含QGridLayout
,其中包含一组按钮。按钮的数量可以增加或缩小,具体取决于用户的输入。间距设置为零,因此所有按钮都聚集在一起。默认情况下,它看起来像这样:
如果按钮数量增加,网格和窗口也会变得很好;但是,如果按钮的数量减少了,它将如下所示:
现在我想调整窗口/布局/窗口小部件的大小,以便所有按钮都可以使用最小的空间。我尝试了各种各样的事情,但都无济于事。我查看了this和this问题,以及Qt板中的各种线程,但它们都没有为我工作。
我的布局构建如下:
self.grid = QtGui.QGridLayout()
self.grid.setSpacing(0)
hBox = QtGui.QHBoxLayout()
hBox.addWidget(...)
vBox = QtGui.QVBoxLayout(self.widget)
vBox.addLayout(hBox)
vBox.addLayout(self.grid)
self.setCentralWidget(self.widget)
我尝试用...来调整它的大小。
self.widget.layout().activate()
self.resize(self.minimumSize())
# self.resize(self.sizeHint())
......以及其他各种方法。我还尝试设置窗口和网格的大小策略。
答案 0 :(得分:4)
您可以在更改窗口小部件数量后将窗口大小调整为minimumSizeHint()
:
self.resize(minimumSizeHint())
这会将窗口缩小到最小尺寸。但是,您应该考虑在事件循环中处理某些事件之前不会计算最小大小。因此,当更改按钮数时,只需处理事件循环一些迭代,然后调整大小到最小值。
就像:
for i in range(0, 10):
QApplication.processEvents()
self.resize(minimumSizeHint())
另一种选择是单击QTimer
,调用一个插槽,在该插槽中将窗口的大小调整到最小。这样,当您调整窗口大小时,将正确计算最小大小提示。