可调整大小的GridLayou中的PyQt居中小部件

2024-09-24 20:26:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我的想法是在QtGui MainWindow中显示一个密码输入框。在执行密码检查之后,它将调用程序来显示其余的按钮。我希望我的密码输入框是这样的

enter image description here

这是我的代码:

class MainWindow(QtGui.QMainWindow):

    def __init__(self,parent = None):
        super(MainWindow,self).__init__(parent)

        self.CheckPassword()

    def CheckPassword(self):
        username_label = QtGui.QLabel("Username :")
        password_label = QtGui.QLabel("Password :")
        _username = QtGui.QLineEdit()
        _password = QtGui.QLineEdit()

        password_layout = QtGui.QGridLayout()
        password_layout.addWidget(username_label,1,0)
        password_layout.addWidget(password_label,2,0)
        password_layout.addWidget(_username,1,1)
        password_layout.addWidget(_password,2,1)

        password_widget = QtGui.QWidget()
        password_widget.setLayout(password_layout)
        self.setCentralWidget(password_widget)

我的问题是,由于我将小部件设置为centralwidget,它会像窗口一样展开。

所以我试图设置usesetMaximumSize,但在这种情况下,我似乎无法将小部件定位在MainWindow的中心。

如何为密码输入设置QWidget的大小,并将其定位为始终居中,无论主窗口大小如何?


Tags: self密码initdefusernamepasswordwidgetlabel
2条回答

这是QFormLayout的典型使用场景。你不应该使用网格布局。

可以通过设置行和列拉伸来完成此操作。将小部件移动到网格的中心,在两侧保留一行和一列,然后为这些列设置拉伸因子。

网格的可视化示例

+------------------------------+
|   s        stretch        s  |
|   t   +-------+-------+   t  |
|   r   | label | input |   r  |
|   e   +-------+-------+   e  |
|   t   | label | input |   t  |
|   c   +-------+-------+   c  |
|   h        stretch        h  |
+------------------------------+

代码:

password_layout = QtGui.QGridLayout()
# Set the stretch
password_layout.setColumnStretch(0, 1)
password_layout.setColumnStretch(3, 1)
password_layout.setRowStretch(0, 1)
password_layout.setRowStretch(3, 1)
# Add widgets
password_layout.addWidget(username_label, 1, 1)
password_layout.addWidget(password_label, 2, 1)
password_layout.addWidget(_username, 1, 2)
password_layout.addWidget(_password, 2, 2)

相关问题 更多 >