PySide:如果隐藏了一个小部件,那么调整主窗口大小的最佳方法是什么?

Igo*_*gor 6 python qt resize designer pyside

如果隐藏了一个小部件,自动调整主窗口大小的最佳方法是什么?如果我再次显示窗口小部件,我还需要调整窗口大小.看下面的图片......

我应该在Qt Designer中为MainWindow(sizePolicy),centralwidget(sizePolicy,layoutSizeConstraint)和gridLayout(sizePolicy,layoutSizeConstraint)设置哪些设置?

如何隐藏textEdit小部件?self.textEditObject.setVisible(False)有效:textEditObject不可见,但这是调整窗口大小的正确方法吗?

我想我不明白一些基本的东西,因为我无法得到理想的行为.

在此输入图像描述

Nej*_*jat 5

minimumSizeHint()隐藏小部件后,可以将窗口调整为:

self.resize(minimumSizeHint())
Run Code Online (Sandbox Code Playgroud)

这会将窗口缩小到最小尺寸。

如果您只想缩小高度,则可以执行以下操作:

self.resize(width(), minimumSizeHint().height())
Run Code Online (Sandbox Code Playgroud)

但是,您应该考虑直到在事件循环中处理了某些事件后才计算最小大小。因此,当您隐藏窗口小部件时,只需处理事件循环进行一些迭代,然后将其调整为最小即可。

就像是 :

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

self.resize(width(), minimumSizeHint().height())
Run Code Online (Sandbox Code Playgroud)

另一种选择是单拍一个QTimer,它会调用一个插槽,您可以在其中将窗口调整为最小尺寸。这样,当您调整窗口大小时,最小大小提示将正确计算。


Tri*_*ion 5

QWidget.adjustSize()比手动调整大小还要简单。

这是一个例子:

from PySide import QtGui

def hide_show():
    x.setVisible(not x.isVisible()) # toggles visibility of the label
    w.adjustSize() # adjusts size of widget

app = QtGui.QApplication([])

w = QtGui.QWidget()
l = QtGui.QVBoxLayout(w)
b = QtGui.QPushButton('Click me')
l.addWidget(b)
x = QtGui.QLabel('Some Text')
l.addWidget(x)
b.clicked.connect(hide_show)
w.show()

app.exec_()
Run Code Online (Sandbox Code Playgroud)

如果您有一个,QMainWidget我实际上只设法缩小了一点,但没有完全缩小。也许比其他解决方案更好。

from PySide import QtGui

def hide_show():
    x.setVisible(not x.isVisible()) # toggles visibility of the label
    w2.adjustSize() # adjusts size of widget
    w.adjustSize() # adjusts size of main window

app = QtGui.QApplication([])

w = QtGui.QMainWindow()
w2 = QtGui.QWidget()
l = QtGui.QVBoxLayout(w2)
b = QtGui.QPushButton('Click me')
l.addWidget(b)
x = QtGui.QTextEdit('Some Text')
l.addWidget(x)
b.clicked.connect(hide_show)
w.setCentralWidget(w2)
w.show()

app.exec_()
Run Code Online (Sandbox Code Playgroud)