簡體   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