在布局内容更改后,将QMainWindow调整为最小尺寸

时间:2015-02-22 17:35:59

标签: python qt layout pyqt qmainwindow

我正在使用QMainWindow的子类,其中我声明了一个中心小部件。此小部件包含QGridLayout,其中包含一组按钮。按钮的数量可以增加或缩小,具体取决于用户的输入。间距设置为零,因此所有按钮都聚集在一起。默认情况下,它看起来像这样:

Layout by default

如果按钮数量增加,网格和窗口也会变得很好;但是,如果按钮的数量减少了,它将如下所示:

Layout done wrong

现在我想调整窗口/布局/窗口小部件的大小,以便所有按钮都可以使用最小的空间。我尝试了各种各样的事情,但都无济于事。我查看了thisthis问题,以及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())

......以及其他各种方法。我还尝试设置窗口和网格的大小策略。

1 个答案:

答案 0 :(得分:4)

您可以在更改窗口小部件数量后将窗口大小调整为minimumSizeHint()

self.resize(minimumSizeHint())

这会将窗口缩小到最小尺寸。但是,您应该考虑在事件循环中处理某些事件之前不会计算最小大小。因此,当更改按钮数时,只需处理事件循环一些迭代,然后调整大小到最小值。

就像:

for i in range(0, 10):
      QApplication.processEvents()

self.resize(minimumSizeHint())

另一种选择是单击QTimer,调用一个插槽,在该插槽中将窗口的大小调整到最小。这样,当您调整窗口大小时,将正确计算最小大小提示。