Reputation: 599
I have a problem that the layout cannot automatically fill the window when the window changes its size. So how to make this layout to fill the window whenever the windows resizes?
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(200,40)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.horizontalLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.horizontalLayout = QtWidgets.QHBoxLayout(self.horizontalLayoutWidget)
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.label = QtWidgets.QLabel(self.horizontalLayoutWidget)
self.label.setText("LABEL")
self.horizontalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
self.horizontalLayout.addWidget(self.lineEdit)
MainWindow.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
I want the line always to fill the width of window.
Upvotes: 1
Views: 6381
Reputation: 243907
You do not have to create a new widget, you have to use the layouts properly, first place the QLabel with the QLineEdit inside a QHBoxLayout. then we put the layout with a QSpacerItem in a QVBoxLayout as I show below:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(200,40)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.vlayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setText("LABEL")
self.horizontalLayout.addWidget(self.label)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.horizontalLayout.addWidget(self.lineEdit)
self.vlayout.addLayout(self.horizontalLayout)
spacerItem = QtWidgets.QSpacerItem(20, 245, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.vlayout.addItem(spacerItem)
MainWindow.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
Another option is to use QFormLayout:
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(200,40)
self.centralwidget = QtWidgets.QWidget(MainWindow)
flayout = QtWidgets.QFormLayout(self.centralwidget)
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
flayout.addRow("LABEL", self.lineEdit)
MainWindow.setCentralWidget(self.centralwidget)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
Upvotes: 1