0

私は次のpysideウィジェットコードを持っています:

class NavigationHeadWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self._current_page = 0
        self._last_page = 0

        self._pageination_string = "page %s of %s"
        self._pagination_label = QLabel()
        self._pagination_label.setText(self._pageination_string % (str(self._current_page), str(self._last_page)))


        self.setMinimumWidth(400)
        self._header_buttons_prev = QPushButton("b_prev")
        self._header_buttons_next = QPushButton("b_next")
        self._header_buttons_prev.setText("prev")
        self._header_buttons_next.setText("next")
        self._header_buttons_next.setMaximumWidth(40)
        self._header_buttons_prev.setMaximumWidth(40)
        self._layout = QHBoxLayout()
        self._layout.addWidget(self._header_buttons_prev,Qt.AlignLeft)
        self._layout.addWidget(self._pagination_label,Qt.AlignCenter)
        self._layout.addWidget(self._header_buttons_next,Qt.AlignRight)
        self.setLayout(self._layout)

その結果:

ここに画像の説明を入力

テキストがボタン間の中央に配置されることを期待していますが、左揃えのままです。

ラベルをコメントアウトすると、次のようになります。

ここに画像の説明を入力

ボタンが左右に配置されていることを期待していますが、そうではないようです。

私が望む動作を得るための正しい構文は何ですか?

さらに、ボタンに含まれるテキストに合わせてボタンのサイズを自動的に調整するにはどうすればよいですか? 上記のコードでサイズをハードコーディングする必要があります。

4

1 に答える 1

2

ラベルを追加すると、中央に配置されます (2 つのボタンの間のすべてのスペースを埋めます)。ただし、ラベル内のテキストも自動的に中央揃えになるわけではありません。これを行うには、以下を追加するだけです:

self._pagination_label.setAlignment(Qt.AlignCenter)

QSpacerItemボタンとラベルの間に s を追加して、同じ効果を得ることができます (addStretch伸縮可能なスペースが必要な場所でレイアウトのメソッドを呼び出します)。

self._layout.addWidget(self._header_buttons_prev)
self._layout.addStretch()
self._layout.addWidget(self._pagination_label)
self._layout.addStretch()
self._layout.addWidget(self._header_buttons_next)
于 2012-07-06T14:29:39.450 に答える