まず第一に、なぜあなたがを使用しているのかわかりません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
と水平方向のサイズが変更されます。
行に0
またがる3
行にウィジェットを配置する場合は、レイアウトに新しいウィジェットを追加する衝突を作成しないように注意する必要があることに注意してください。