Python 如何使用QLineEdit();QPushButton到登录窗口的中心?
我正在创建一个登录窗口,并使用QLineEdit为我的用户提供一个输入详细信息的位置。现在,我专注于创建GUI。如图所示,考虑到我如何将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
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
是毫无意义的,这是指行编辑的内容(文本),而不是它的位置。