Python 如何使用QLineEdit();QPushButton到登录窗口的中心?

Python 如何使用QLineEdit();QPushButton到登录窗口的中心?,python,qt,pyqt,pyqt5,qlineedit,Python,Qt,Pyqt,Pyqt5,Qlineedit,我正在创建一个登录窗口,并使用QLineEdit为我的用户提供一个输入详细信息的位置。现在,我专注于创建GUI。如图所示,考虑到我如何将setAlignment设置为AlignCenter,我不确定布局为何如此。这也适用于QPushButton。是否有我不知道的类可以修复此格式问题 import sys from PyQt5 import QtCore from PyQt5 import QtWidgets from PyQt5.QtWidgets import QMainWindow, QAp

我正在创建一个登录窗口,并使用QLineEdit为我的用户提供一个输入详细信息的位置。现在,我专注于创建GUI。如图所示,考虑到我如何将
setAlignment
设置为
AlignCenter
,我不确定布局为何如此。这也适用于QPushButton。是否有我不知道的类可以修复此格式问题

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主窗口(QMainWindow):
定义初始化(self,*args,**kwargs):
超级(主窗口,自我)。\uuuuu初始化(*args,**kwargs)
self.setWindowTitle(“MidiScribe-登录窗口”)
自设置固定大小(800800)
自选表格(
背景颜色:深红色;
边框颜色:栗色;
边框:2.5px起始rgb(128128128);
边界半径:3px;“”“
)
self.username=QLineEdit(alignment=QtCore.Qt.AlignCenter)
self.username.setFixedWidth(300)
self.username.setStyleSheet(“”“背景色:白色;”)
self.password=QLineEdit(alignment=QtCore.Qt.AlignCenter)
self.password.setFixedWidth(300)
self.password.setStyleSheet(“背景色:白色”)
self.loginbutton=QPushButton(“登录”)
self.loginbutton.setFixedSize(50,50)
self.loginbutton.setStyleSheet(
“QPushButton{背景色:lightcoral}”
“QPushButton:悬停{背景色:浅粉色}”
“QPushButton:按下{背景色:印度红}”
)
container=QWidget(objectName=“container”)
container.setStyleSheet(“QWidget#container{border:none}”)
container.setContentsMargins(0,0,0,0)
lay=QVBoxLayout(容器)
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(中心窗口小部件)
grid_layout=QGridLayout(中心_小部件)
grid_layout.addWidget(容器,1,1)

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

class主窗口(QMainWindow):
定义初始化(self,*args,**kwargs):
超级(主窗口,自我)。\uuuuu初始化(*args,**kwargs)
self.setWindowTitle(“MidiScribe-登录窗口”)
自设置固定大小(800800)
自选表格(
背景颜色:深红色;
边框颜色:栗色;
边框:2.5px起始rgb(128128128);
边界半径:3px;“”“
)
self.username=QLineEdit(alignment=QtCore.Qt.AlignCenter)
self.username.setFixedWidth(300)
self.username.setStyleSheet(“”“背景色:白色;”)
self.password=QLineEdit(alignment=QtCore.Qt.AlignCenter)
self.password.setFixedWidth(300)
self.password.setStyleSheet(“背景色:白色”)
self.loginbutton=QPushButton(“登录”)
self.loginbutton.setFixedSize(50,50)
self.loginbutton.setStyleSheet(
“QPushButton{背景色:lightcoral}”
“QPushButton:悬停{背景色:浅粉色}”
“QPushButton:按下{背景色:印度红}”
)
container=QWidget(objectName=“container”)
container.setStyleSheet(“QWidget#container{border:none}”)
container.setContentsMargins(0,0,0,0)
lay=QVBoxLayout(容器)
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(中心窗口小部件)
grid_layout=QGridLayout(中心_小部件)
grid_layout.addWidget(容器,1,1)

只需对主布局进行对齐即可:

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

只需对主布局进行对齐:

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

非常好的解决方案非常好的解决方案你试过这个解决方案吗?因为OP需要将所有小部件对齐到中心,而您提供的代码是不够的,因为按钮只会对齐到中心小部件的左侧,因为设置布局项目的对齐方式只会使布局居中,而不会使其内容居中,并且小部件也会垂直均匀分布。好的,谢谢,我修好了。你试过这个解决方案吗?因为OP需要将所有小部件对齐到中心,而您提供的代码是不够的,因为按钮只会对齐到中心小部件的左侧,因为设置布局项目的对齐方式只会使布局居中,而不会使其内容居中,并且小部件也会垂直均匀分布。好的,谢谢,我注意到多次使用
setLayout
是毫无意义的,这是指行编辑的内容(文本),而不是它的位置。注意多次使用
setLayout
是毫无意义的,这是指行编辑的内容(文本),而不是它的位置。