如果我有一个QGridLayout
并将两个小部件堆叠在一起,那么它们每个占用50%的布局。但是,如果其中一个窗口小部件是QLineEdit
窗口小部件,则该窗口小部件占布局的一小部分,而不是50%。
如何向QGridLayout
添加两个小部件,然后将初始部分设置为50%/ 50%以外的其他小部件?
答案 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)
替代。