【问题标题】:How to make layout automatically fill window size如何使布局自动填充窗口大小
【发布时间】:2017-12-17 06:17:58
【问题描述】:

我有一个问题,当窗口改变大小时,布局不能自动填充窗口。那么如何让这个布局在窗口调整大小时填满窗口呢?

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_())

我希望线条总是填满窗口的宽度。

【问题讨论】:

    标签: python pyqt pyqt5 qlayout


    【解决方案1】:

    您不必创建新的小部件,您必须正确使用布局,首先将带有 QLineEdit 的 QLabel 放在 QHBoxLayout 中。然后我们将带有 QSpacerItem 的布局放在 QVBoxLayout 中,如下所示:

    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)
    

    另一种选择是使用 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)
    

    【讨论】:

    • QSpacerItem中的(20,245是什么意思?
    • 默认是QSpacerItem的大小,宽20高245,QSpacerItem就像一个弹性体。
    • 以及如何移动这个布局的位置?
    • 移动位置是什么意思?
    • 我的意思是布局的y轴位置,线到窗口上边缘的距离。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    相关资源
    最近更新 更多