我是新手,我正在尝试制作一个可调整窗口大小的 GUI。我试图在调整窗口大小时扩展窗口内的内容。我尝试使用 layout thingy 但我无法让它工作。
这是我的完整代码:
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_())
我对此进行了说明以使其更清楚:
答案 0 :(得分:1)
您必须明白,如果您希望小部件将其大小调整为容器,那么您必须使用布局,以及您如何使用 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_())