I have a question. I have tried layouts in PyQt5 and it works partially. But not the way I want it.
This is my code:
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class CompanyLogin(QWidget):
def __init__(self, *args, **kwargs):
super().__init__()
self.layout = QGridLayout()
self.setLayout(self.layout)
self.setWindowTitle('Window')
self.setGeometry(0, 0, 1920, 1080)
self.setupUI()
def setupUI(self):
company_note = QLabel(parent=self, text='Company: ')
self.company = QComboBox(parent=self)
self.company.addItem('t1')
self.company.addItem('t2')
password_note = QLabel(parent=self, text='Password: ')
self.password = QLineEdit(parent=self)
submit = QPushButton(parent=self, text='Submit')
verticalSpacer = QSpacerItem(40, 20, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.layout.addItem(verticalSpacer, 6, 0, Qt.AlignTop)
self.layout.addWidget(company_note, 1, 0, Qt.AlignLeft)
self.layout.addWidget(self.company, 1, 1, Qt.AlignRight)
self.layout.addWidget(password_note, 2, 0, Qt.AlignLeft)
self.layout.addWidget(self.password, 2, 1, Qt.AlignRight)
self.layout.addWidget(submit, 3, 0, 1, 0, Qt.AlignCenter)
This is what my window looks like so far:

And this is how I want it to look:

Right now the simplest solution could be to add this simple line:
But, actually, setting the layout alignment is often cause of unexpected problems, and the fact is that there are some issues in your code that should be fixed instead:
setRowStretch()andsetColumnStretch();Other small notes:
layout()is an existing dynamic function of all QWidgets, you shall not overwrite it; also, theparentargument in widget constructors is pointless if you then add the widget to the parent's layout; finally, use keyword arguments only when required.