在布局中调整窗口小部件大小的正确方法是什么?

时间:2014-09-30 19:43:23

标签: python-3.x pyqt pyside

如果我有一个QGridLayout并将两个小部件堆叠在一起,那么它们每个占用50%的布局。但是,如果其中一个窗口小部件是QLineEdit窗口小部件,则该窗口小部件占布局的一小部分,而不是50%。

如何向QGridLayout添加两个小部件,然后将初始部分设置为50%/ 50%以外的其他小部件?

2 个答案:

答案 0 :(得分:0)

您可以使用QWidget.setSizePolicy更改窗口小部件的布局行为。默认大小策略为QSizePolicy.Preferred,这意味着窗口小部件可以自由调整大小,但更喜欢其自然"。例如,QLineEdit不会垂直调整大小。

在此示例中,按钮设置为垂直扩展,填充空间并打破50/50布局:

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class Window(QWidget):
    def __init__(self, *args, **kwargs):
        QWidget.__init__(self, *args, **kwargs)

        self.button = QPushButton("Test", self)
        self.button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.edit = QLineEdit(self)

        self.layout = QGridLayout()
        self.layout.addWidget(self.button, 0, 0)
        self.layout.addWidget(self.edit, 1, 0)

        self.setLayout(self.layout)
        self.show()

app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())

答案 1 :(得分:0)

QLineEdit的默认垂直尺寸政策为QSizePolicy.Fixed。这意味着它将始终具有相同的高度,而其他小部件可能占用布局中的可用空间。 因此,您可能必须像Fenisko已经演示的那样调整小部件的大小策略。

但是,如果您的布局中有两个或更多扩展小部件,则所有小部件的大小都相同。 您可以使用QGridLayout.setRowStretch(int column, int stretch)和 您的布局QGridLayout.setColumnStretch(int column, int stretch)可调整行和列的比例。

使用您的小部件尺寸政策的QSizePolicy.setVerticalStretch(int stretch)QSizePolicy.setHorizontalStretch(int stretch)替代。