繁体   English   中英

如何将 QLineEdit() 和 QPushButton 带到登录 window 的中心?

[英]How to bring QLineEdit() & QPushButton to centre of Login window?

我正在创建一个 LoginWindow 并使用 QLineEdit 来为我的用户输入他们的详细信息。 现在,我专注于创建 GUI。 如图所示,考虑到我如何将setAlignmentAlignCenter ,我不确定为什么布局看起来像这样。 这也适用于 QPushButton。 是否有 class 我不知道要解决此格式问题?

import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QPushButton, QLineEdit, QVBoxLayout
import time #For time sleep

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setWindowTitle("MidiScribe - Login Window")
        self.setFixedSize(800,800)
        self.setStyleSheet("""background-color: crimson;
                            border-color: maroon;
                            border: 2.5px outset rgb(128, 128, 128);
                            border-radius: 3px;""")
        container = QWidget()
        self.setCentralWidget(container)
        mainLayout = QVBoxLayout(container)

        self.username = QLineEdit()
        self.username.setFixedWidth(300)
        self.username.setStyleSheet("""background-color: white;""")
        mainLayout.addWidget(self.username)
        self.username.setAlignment(QtCore.Qt.AlignCenter)
        self.setLayout(mainLayout)

        self.password = QLineEdit()
        self.password.setFixedWidth(300)
        self.password.setStyleSheet("""background-color: white""")
        mainLayout.addWidget(self.password)
        self.password.setAlignment(QtCore.Qt.AlignCenter)
        self.setLayout(mainLayout)

        self.loginbutton = QPushButton("Login")
        self.loginbutton.setFixedSize(50,50)
        self.loginbutton.setStyleSheet("QPushButton { background-color: lightcoral }"
                        "QPushButton:Hover { background-color: lightpink }"
                      "QPushButton:pressed { background-color: indianred }" )
        mainLayout.addWidget(self.loginbutton)

app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

在此处输入图像描述

这种情况有很多解决方案,但其中一个是使用具有最小尺寸的容器来显示所有小部件,并且通过 QGridLayout 建立:

class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setWindowTitle("MidiScribe - Login Window")
        self.setFixedSize(800, 800)
        self.setStyleSheet(
            """background-color: crimson;
                            border-color: maroon;
                            border: 2.5px outset rgb(128, 128, 128);
                            border-radius: 3px;"""
        )

        self.username = QLineEdit(alignment=QtCore.Qt.AlignCenter)
        self.username.setFixedWidth(300)
        self.username.setStyleSheet("""background-color: white;""")

        self.password = QLineEdit(alignment=QtCore.Qt.AlignCenter)
        self.password.setFixedWidth(300)
        self.password.setStyleSheet("""background-color: white""")

        self.loginbutton = QPushButton("Login")
        self.loginbutton.setFixedSize(50, 50)
        self.loginbutton.setStyleSheet(
            "QPushButton { background-color: lightcoral }"
            "QPushButton:Hover { background-color: lightpink }"
            "QPushButton:pressed { background-color: indianred }"
        )

        container = QWidget(objectName="container")
        container.setStyleSheet("QWidget#container{border: none}")
        container.setContentsMargins(0, 0, 0, 0)
        lay = QVBoxLayout(container)
        lay.addWidget(self.username, alignment=QtCore.Qt.AlignCenter)
        lay.addWidget(self.password, alignment=QtCore.Qt.AlignCenter)
        lay.addWidget(self.loginbutton, alignment=QtCore.Qt.AlignCenter)
        container.setFixedSize(container.sizeHint())

        central_widget = QWidget()
        self.setCentralWidget(central_widget)

        grid_layout = QGridLayout(central_widget)
        grid_layout.addWidget(container, 1, 1)

在此处输入图像描述

只需对 mainLayout 执行 alignment :

mainLayout.addWidget(self.loginbutton, alignment=QtCore.Qt.AlignCenter)
mainLayout.setAlignment(QtCore.Qt.AlignCenter)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM