如何将小部件的高度和宽度调整为 window 大小?

How to adjust height & width of a widget to the window size?

我正在做一个项目,我在 qt designer 中制作 UI 并在 python 中编写代码。我没有在 qt 设计器中设置 ui 小部件或 window 的任何高度和宽度属性。当我启动它时,它并没有覆盖整个 window。下面是代码:

app.py

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from ui.test import Ui_MainWindow

class Login(QMainWindow, Ui_MainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

app = QApplication(sys.argv)
main_window = Login()
main_window.show()
sys.exit(app.exec_())

test.py(已从 test.ui 转换而来)

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1177, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.table_widget = QtWidgets.QTableWidget(self.centralwidget)
        self.table_widget.setGeometry(QtCore.QRect(10, 10, 1161, 421))
        self.table_widget.setRowCount(20)
        self.table_widget.setColumnCount(20)
        self.table_widget.setObjectName("table_widget")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "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_())

当我启动代码时,它看起来像下面这样:

在上图中,我可以移动滚动条来查看所有行和列,但是如果我单击最大化 window,它看起来如下所示:

但在上图中,高度和宽度保持不变。我怎样才能让它全屏显示,以便小部件的高度和宽度与 window 大小匹配。请帮忙。谢谢

您忘记将 table_widget 添加到 centralwidget,所以您应该使用布局。

这是关于 Layout Management. You can also set the layouts in Qt Designer (Using Layouts in Qt Designer) 的信息。

        layout = QVBoxLayout()
        layout.addWidget(self.table_widget)
        self.centralwidget.setLayout(layout)

完整代码。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QVBoxLayout


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1177, 480)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.table_widget = QtWidgets.QTableWidget(self.centralwidget)
        # adding table_widget to central widget
        layout = QVBoxLayout()
        layout.addWidget(self.table_widget)
        self.centralwidget.setLayout(layout)
        # end
        self.table_widget.setGeometry(QtCore.QRect(10, 10, 1161, 421))
        self.table_widget.setRowCount(20)
        self.table_widget.setColumnCount(20)
        self.table_widget.setObjectName("table_widget")
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "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_())