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

阿里夫

我是新手,我正在尝试制作一个可调整窗口大小的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(正常运行:
正常运行

PIC 2(调整大小时:
调整大小时

图三(什么即时试图做的:
我想做什么

永乐

您必须了解,如果要让小部件将其大小调整为适合容器的大小,则必须使用布局,以及如何使用QtDesigner,则以下.ui会显示解决方案:

design.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>651</width>
    <height>445</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <layout class="QVBoxLayout" name="verticalLayout_2">
   <item>
    <widget class="QTableWidget" name="tableWidget"/>
   </item>
   <item>
    <layout class="QHBoxLayout" name="horizontalLayout">
     <item>
      <widget class="QPushButton" name="Tkolom">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="text">
        <string>Tambah Kolom</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="Tbaris">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="text">
        <string>Tambah Baris</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="Hkolom">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="text">
        <string>Hapus Kolom</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="Hbaris">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="text">
        <string>Hapus Baris</string>
       </property>
      </widget>
     </item>
     <item>
      <widget class="QPushButton" name="FS">
       <property name="sizePolicy">
        <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
         <horstretch>0</horstretch>
         <verstretch>0</verstretch>
        </sizepolicy>
       </property>
       <property name="text">
        <string>Fullscreen</string>
       </property>
      </widget>
     </item>
     <item>
      <layout class="QVBoxLayout" name="verticalLayout">
       <item>
        <widget class="QLineEdit" name="kotaknama"/>
       </item>
       <item>
        <widget class="QPushButton" name="Simpan">
         <property name="text">
          <string>Simpan</string>
         </property>
        </widget>
       </item>
      </layout>
     </item>
    </layout>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections/>
</ui>

然后,您必须使用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_())

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章