Python 调整窗口大小时如何调整布局?
我是新来的,我正在尝试制作一个可以调整窗口大小的GUI。我试图使窗口内的内容在调整窗口大小时展开。我试着用布局的东西,但我不能让它工作 这是我的完整代码: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
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_())