pyside qt4,alligningment语法误解

时间:2012-07-06 14:00:41

标签: python user-interface qt4 pyside

我有以下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)

导致:

enter image description here

我希望文本在按钮之间居中,但它会留下所有符号。

如果我注释掉我得到的标签:

enter image description here

我希望按钮可以左右对齐,但它们似乎并没有这样做。

什么是正确的语法来获得我想要的行为?

Additionaly如何让按钮自动调整为包含的文本?必须在上面的代码中硬编码大小。

1 个答案:

答案 0 :(得分:2)

你添加了标签,它居中(它填满了两个按钮之间的所有空间)。但这并不意味着标签内的文本也会自动居中。要做到这一点,只需添加:

self._pagination_label.setAlignment(Qt.AlignCenter)

您还可以在按钮和标签之间添加QSpacerItem以获得相同的效果(通过调用需要可伸缩空间的布局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)