Python 调整窗口大小时如何调整布局?

Python 调整窗口大小时如何调整布局?,python,pyqt,pyqt5,Python,Pyqt,Pyqt5,我是新来的,我正在尝试制作一个可以调整窗口大小的GUI。我试图使窗口内的内容在调整窗口大小时展开。我试着用布局的东西,但我不能让它工作 这是我的完整代码: from PyQt5 import QtCore, QtGui, QtWidgets import sys class Ui_Dialog(object): def setupUI2(self, Dialog): Dialog.resize(800, 600) self.widget = QtWid

我是新来的,我正在尝试制作一个可以调整窗口大小的GUI。我试图使窗口内的内容在调整窗口大小时展开。我试着用布局的东西,但我不能让它工作

这是我的完整代码:

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class Ui_Dialog(object):
    def setupUI2(self, Dialog):
        Dialog.resize(800, 600)

        self.widget = QtWidgets.QWidget(Dialog)
        self.widget.setGeometry(QtCore.QRect(10, 10, 781, 581))

        self.grup = QtWidgets.QVBoxLayout(self.widget)
        self.grup.setContentsMargins(0, 0, 0, 0)

        self.tableWidget = QtWidgets.QTableWidget(Dialog)
        self.tableWidget.setGeometry(QtCore.QRect(10, 10, 780, 520))
        self.tableWidget.setRowCount(1)
        self.tableWidget.setColumnCount(1)
        self.grup.addWidget(self.tableWidget)

        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(5)

        self.Tkolom = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.Tkolom.sizePolicy().hasHeightForWidth())
        self.Tkolom.setSizePolicy(sizePolicy)
        self.horizontalLayout.addWidget(self.Tkolom)

        self.Tbaris = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.Tbaris.sizePolicy().hasHeightForWidth())
        self.Tbaris.setSizePolicy(sizePolicy)
        self.horizontalLayout.addWidget(self.Tbaris)

        self.Hkolom = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.Hkolom.sizePolicy().hasHeightForWidth())
        self.Hkolom.setSizePolicy(sizePolicy)
        self.horizontalLayout.addWidget(self.Hkolom)

        self.Hbaris = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.Hbaris.sizePolicy().hasHeightForWidth())
        self.Hbaris.setSizePolicy(sizePolicy)
        self.horizontalLayout.addWidget(self.Hbaris)

        self.FS = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.FS.sizePolicy().hasHeightForWidth())
        self.FS.setSizePolicy(sizePolicy)
        self.horizontalLayout.addWidget(self.FS)

        self.verticalLayout = QtWidgets.QVBoxLayout()
        self.kotaknama = QtWidgets.QLineEdit(self.widget)
        self.kotaknama.setEnabled(True)
        self.verticalLayout.addWidget(self.kotaknama)
        self.kotaknama.setMaxLength(60)

        self.Simpan = QtWidgets.QPushButton(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHeightForWidth(self.Simpan.sizePolicy().hasHeightForWidth())
        self.Simpan.setSizePolicy(sizePolicy)
        self.verticalLayout.addWidget(self.Simpan)
        self.horizontalLayout.addLayout(self.verticalLayout)

        self.grup.addLayout(self.horizontalLayout)

        def tambahBaris():
            baris = self.tableWidget.rowCount()
            self.tableWidget.insertRow(baris)
        def tambahKolom():
            kolom = self.tableWidget.columnCount()
            self.tableWidget.insertColumn(kolom)
        def hapusBaris():
            if self.tableWidget.rowCount() > 1:
               self.tableWidget.removeRow(self.tableWidget.rowCount() - 1)
        def hapusKolom():
            if self.tableWidget.columnCount() > 1:
               self.tableWidget.removeColumn(self.tableWidget.columnCount() - 1)
        def full():
            Dialog.showMaximized()
        def shot():
            filename = self.kotaknama.text()
            if not filename.isalpha() and not filename.isdigit():
                filename = "Untitled"
            layar = QtWidgets.QApplication.primaryScreen()
            ss = layar.grabWindow(self.tableWidget.winId())
            ss.save(f"{filename}.jpg", 'jpg')

        self.Tbaris.clicked.connect(tambahBaris)
        self.Tkolom.clicked.connect(tambahKolom)
        self.Hbaris.clicked.connect(hapusBaris)
        self.Hkolom.clicked.connect(hapusKolom)
        self.FS.clicked.connect(full)
        self.Simpan.clicked.connect(shot)

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

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Catatan"))
        self.Tkolom.setText(_translate("Dialog", "Tambah Kolom"))
        self.Tbaris.setText(_translate("Dialog", "Tambah Baris"))
        self.Hkolom.setText(_translate("Dialog", "Hapus Kolom"))
        self.Hbaris.setText(_translate("Dialog", "Hapus Baris"))
        self.FS.setText(_translate("Dialog", "Fullscreen"))
        self.Simpan.setText(_translate("Dialog", "Simpan"))

if __name__ == "__main__":
    app3 = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUI2(Dialog)
    Dialog.show()
    sys.exit(app3.exec_())
我对此进行了说明,以使其更加清楚:

图1(正常运行:
)

图2(调整大小时:
)

图3(我想做什么:

)

您必须了解,如果希望小部件根据容器调整其大小,则必须使用布局,以及如何使用QtDesigner。ui显示了解决方案:

design.ui


对话
0
0
651
445
对话
0
0
坦巴科隆
0
0
坦巴巴里斯酒店
0
0
科洛姆海普斯酒店
0
0
巴里斯海普斯酒店
0
0
全屏
辛潘
然后必须使用pyuic将.ui转换为.py,但不能修改该文件,如警告所示:

pyuic5 design.ui -o design_ui.py -x
然后,必须创建主文件,在其中实现逻辑:

main.py

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

from design_ui import Ui_Dialog


class Dialog(QtWidgets.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)

        self.Tbaris.clicked.connect(self.tambahBaris)
        self.Tkolom.clicked.connect(self.tambahKolom)
        self.Hbaris.clicked.connect(self.hapusBaris)
        self.Hkolom.clicked.connect(self.hapusKolom)
        self.FS.clicked.connect(self.full)
        self.Simpan.clicked.connect(self.shot)

    def tambahBaris(self):
        baris = self.tableWidget.rowCount()
        self.tableWidget.insertRow(baris)

    def tambahKolom(self):
        kolom = self.tableWidget.columnCount()
        self.tableWidget.insertColumn(kolom)

    def hapusBaris(self):
        if self.tableWidget.rowCount() > 1:
            self.tableWidget.removeRow(self.tableWidget.rowCount() - 1)

    def hapusKolom(self):
        if self.tableWidget.columnCount() > 1:
            self.tableWidget.removeColumn(self.tableWidget.columnCount() - 1)

    def full(self):
        self.showMaximized()

    def shot(self):
        filename = self.kotaknama.text()
        if not filename.isalpha() and not filename.isdigit():
            filename = "Untitled"
        layar = QtWidgets.QApplication.primaryScreen()
        ss = layar.grabWindow(self.tableWidget.winId())
        ss.save(f"{filename}.jpg", "jpg")


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())