首先我不明白你为什么使用QGridLayout。您是否意识到您根本没有使用网格?你应该简单地使用QVBoxLayout。
无论如何,正如我在评论中提到的,您可能可以使用 QHBoxLayout 和 addStretch 方法获得所需的“输出”:
import sys
from PyQt4 import QtCore, QtGui
class TextEditorDlg(QtGui.QDialog):
def __init__(self, parent=None):
super(TextEditorDlg, self).__init__(parent)
self.resize(500, 400)
self.button = QtGui.QPushButton(self)
self.lineEdit = QtGui.QLineEdit(self)
self.textEdit = QtGui.QTextEdit(self)
self.button_layout = QtGui.QHBoxLayout()
self.button_layout.addStretch()
self.button_layout.addWidget(self.button)
self.button_layout.addStretch()
self.grid = QtGui.QGridLayout(self)
self.grid.addLayout(self.button_layout, 0, 0)
self.grid.addWidget(self.lineEdit, 1, 0)
self.grid.addWidget(self.textEdit, 2, 0)
# Alternative using QVBoxLayout:
#self.layout = QtGui.QVBoxLayout(self)
#self.layout.addLayout(self.button_layout)
#self.layout.addWidget(self.line_edit)
#self.layout.addWidget(self.text_edit)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
myapp = TextEditorDlg()
myapp.show()
sys.exit(app.exec_())
您可以调整将整数传递给addStretch 的拉伸量。
如果您想使用QGridLayout 将按钮放置在特定位置,那么您应该这样做:
import sys
from PyQt4 import QtCore, QtGui
class TextEditorDlg(QtGui.QDialog):
def __init__(self, parent=None):
super(TextEditorDlg, self).__init__(parent)
self.resize(500, 400)
self.button = QtGui.QPushButton(self)
self.lineEdit = QtGui.QLineEdit(self)
self.textEdit = QtGui.QTextEdit(self)
self.grid = QtGui.QGridLayout(self)
# Use the row-span and column-span arguments!
self.grid.addWidget(self.button, 0, 0, 1, 1)
self.grid.addWidget(self.lineEdit, 1, 0, 1, 3)
self.grid.addWidget(self.textEdit, 2, 0, 1, 3)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
myapp = TextEditorDlg()
myapp.show()
sys.exit(app.exec_())
您可以使用正确的行和列索引以及行跨度和列跨度值将按钮准确地放置在您想要的位置。
编辑:如果要更改QPushButton 的大小,您必须更改按钮的QSizePolicy 和QTextEdit 的策略。例如:
import sys
from PyQt4 import QtCore, QtGui
class TextEditorDlg(QtGui.QDialog):
def __init__(self, parent=None):
super(TextEditorDlg, self).__init__(parent)
self.resize(500, 400)
self.button = QtGui.QPushButton(self)
self.button.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding)
self.lineEdit = QtGui.QLineEdit(self)
self.textEdit = QtGui.QTextEdit(self)
self.textEdit.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)
self.grid = QtGui.QGridLayout(self)
# Use the row-span and column-span arguments!
self.grid.addWidget(self.button, 0, 0, 3, 1)
self.grid.addWidget(self.lineEdit, 3, 0, 1, 3)
self.grid.addWidget(self.textEdit, 4, 0, 1, 3)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
myapp = TextEditorDlg()
myapp.show()
sys.exit(app.exec_())
您会看到按钮变大了。您可以通过更改行跨度来控制大小。
在self.grid.addWidget(self.button, 0, 0, 3, 1) 行中,增加/减少3 将增加/减少垂直尺寸(实际上是小部件占用的行数),增加/减少1 将改变水平尺寸。
请注意,如果您将小部件放置在跨越 3 行的 0 行,那么您必须小心不要在布局中添加新小部件时产生冲突。