1

ええと、上にボタンのあるテキストエディタがあります...テキストエディタをレイアウト内に配置して、サイズを拡大および縮小しQDialogたいのですが、ボタンで同じことをしたくありません。ちなみに、これは私が望むサイズではなく、変更することもできません。私に何ができる?

コード:

from PyQt4 import QtCore, QtGui
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class TextEditorDlg(QDialog):
    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        self.resize(500, 400)
        self.Grid = QtGui.QGridLayout(self)
        self.button = QtGui.QPushButton(self)
        self.Grid.addWidget(self.button, 0, 0)
        self.lineEdit = QtGui.QLineEdit(self)
        self.textEdit = QtGui.QTextEdit(self)
        self.Grid.addWidget(self.lineEdit, 1, 0)
        self.Grid.addWidget(self.textEdit, 2, 0)
if __name__ == '__main__':
    app = QApplication(sys.argv)
    myapp = TextEditorDlg()
    myapp.show()
    sys.exit(app.exec_())

今問題を見ますか?

4

1 に答える 1

6

まず第一に、なぜあなたがを使用しているのかわかりませんQGridLayout。グリッドをまったく使用していないことに気づいていますか?単に。を使用する必要がありQVBoxLayoutます。

とにかく、コメントで述べたように、QHBoxLayoutaddStretchメソッドを使用して、おそらく目的の「出力」を取得できます。

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変更する必要があります。例えば:QSizePolicyQTextEdit

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行にウィジェットを配置する場合は、レイアウトに新しいウィジェットを追加する衝突を作成しないように注意する必要があることに注意してください。

于 2012-12-29T14:39:35.037 に答える