如何将标签置于QWizardPage的中心?

时间:2015-05-12 00:11:44

标签: python qt pyqt pyqt4 wizard

我有一个标签:

self.label = QtLabel(self)

位于VBoxLayout内部。

我想设置在QWizardPage的中心,无论窗口的大小是多少。我设法让它水平居中:

self.label.setAlignment(QtCore.Qt.AlignCenter)  

但我似乎无法让它垂直居中。我试过了

self.label.setAlignment(QtCore.Qt.AlignVCenter)

和:

self.label.setAlignment(QtCore.Qt.AlignCenter | AlignVCenter)  

以及其他一些我现在都记不住的事情(如果我这样做,我会编辑)。阅读this answer后,问题似乎与设置最小和最大尺寸有关。我尝试过,将MinimumHeight和MaximumHeight设置为200。这大致以标签为中心,但它不适应窗户高度的变化,只适应其宽度。

如何将此标签直接放在页面中间?

2 个答案:

答案 0 :(得分:1)

在两个垫片之间添加标签。您的垂直布局也应该在其父窗口小部件中布局,因此它需要父级的完整大小。

QSpacerItem* verticalSpacer1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
label = new QLabel(Form);
label->setAlignment(Qt::AlignCenter);
QSpacerItem* verticalSpacer2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);

verticalLayout->addItem(verticalSpacer1);
verticalLayout->addWidget(label);
verticalLayout->addItem(verticalSpacer2);

答案 1 :(得分:1)

如果您不想设置最小尺寸政策,可以使用QWidgets执行以下操作:

QWizardPage.__init__(self)

    intro_text = "Some text that needs to be centered..."

    self.introVBox = QVBoxLayout(self)

    self.sizer_top = QWidget()
    self.sizer_top.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
    self.sizer_bottom = QWidget()
    self.sizer_bottom.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)

    self.label = QLabel(self)
    self.label.setText(intro_text)
    self.label.setAlignment(QtCore.Qt.AlignCenter)
    self.introVBox.addWidget(self.sizer_top)
    self.introVBox.addWidget(self.label)
    self.introVBox.addWidget(self.sizer_bottom)
    self.setLayout(self.introVBox);