1

PySide アプリケーション用の単純なダイアログ ボックスを作成しています。このダイアログ内には、ユーザーが入力する必要がある複数の入力があります。これらの入力に関連付けられているのは、ラベルの左側にあるラベルです。今、別のクラスを使用して、ラベルと入力のペアを作成します。

class inputLayout(PyGui.QHBoxLayout):
    def __init__(self, Label, parent):
        super(inputLayout, self).__init__()

        label = PyGui.QLabel()
        label.setText(Label)
        self.addWidget(label)

        self.__input = PyGui.QTextEdit()
        self.addWidget(self.__input)

        parent.addLayout(self)

次に、次のようにマスター レイアウトに追加します。

layout = PyGui.QVBoxLayout()

self.amp = inputLayout('Amplitude', layout)
self.test = inputLayout('test', layout)
self.test2 = inputLayout('test2', layout)

問題は、PySide が automagic を実行すると、次のような結果になることです。

オー・ノエス!

私の画像が示唆するように、ラベルを 1/3 (または選択した他の比例率) にして、より統一的に見えるようにしたいと思います。この比例または比率を使用してレイアウトのサイズを変更するにはどうすればよいですか?


私はこの質問を認識していますが、ラベルのサイズを静的に設定するのではなく、比率を使用して動的に設定しようとしています。

4

1 に答える 1

1

問題を解決する小さな例を次に示します。鍵は次の 2 つの部分にあります。

  1. を使用してQGridLayout、列の幅をその列の最も広いウィジェットの幅に設定します (別の方法で定義されていない限り)。これにより、すべてが垂直軸に沿って適切に配置されます。

  2. ストレッチ係数を設定します。これは、親のサイズが変更されたときに要素のサイズを変更する方法を決定します。デフォルトでは 0 なので、設定する必要はありません。説明のために追加しただけです。text_edit の列を 1 に設定すると、ストレッチが開始されます。要因を操作することで、1 つの列を他の列よりも速く成長させることができます。


from PySide import QtGui
import sys

class MainWindow(QtGui.QMainWindow):
  def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.input_widget = InputWidget(self)

        self.layout = QtGui.QVBoxLayout()
        self.layout.addWidget(self.input_widget)
        self.setLayout(self.layout)
        self.setCentralWidget(self.input_widget)

class InputWidget(QtGui.QWidget):
    def __init__(self, parent):
        super(InputWidget, self).__init__(parent)

        self.grid_layout = QtGui.QGridLayout()
        self.labels = ["amp", "more text", "blabla"]

        self.text_edits = []
        self.qlabels = []

        for row, label in enumerate(self.labels):
            label = QtGui.QLabel(label)
            self.qlabels.append(label)
            self.grid_layout.addWidget(label, row, 0)
            text_edit = QtGui.QTextEdit()
            self.text_edits.append(text_edit)
            self.grid_layout.addWidget(text_edit, row, 1)

        self.grid_layout.setColumnStretch(0, 0)
        self.grid_layout.setColumnStretch(1, 2)

        self.setLayout(self.grid_layout)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_() 

からテキストにアクセスする場合はtext_edit、 でラベルのインデックスを検索し、self.labelsそのラベルを で使用してself.text_edits、対応する を取得できますtext_edit。または、ダイアログを閉じたら、 と の両方self.labelsをループしself.text_editsて、ラベルを のテキストにマップするディクショナリを作成できますtext_edit

results = {}
for label, text_edit in zip(self.labels, self.text_edits):
    results[label] = text_edit.text()
于 2013-08-05T22:59:04.163 に答える