from PySide6.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QCheckBox, QPushButton, QTableWidgetItem, \ QTableWidget import sys from PySide6.QtCore import Qt class MyWidget(QWidget): def init(self): super().init() self.initUI() def initUI(self): # 设置窗口大小和标题 self.setGeometry(300, 300, 500, 300) self.setWindowTitle('My Widget') # 创建组件 self.checkbox1 = QCheckBox('Option 1') self.checkbox2 = QCheckBox('Option 2') self.checkbox3 = QCheckBox('Option 3') self.checkbox4 = QCheckBox('Option 4') self.checkbox5 = QCheckBox('Option 5') self.pushbutton = QPushButton('Create Table') self.pushbutton.clicked.connect(self.createTable) # 创建布局 hbox1 = QHBoxLayout() hbox1.addWidget(self.checkbox1) hbox1.addWidget(self.checkbox2) hbox1.addWidget(self.checkbox3) hbox2 = QHBoxLayout() hbox2.addWidget(self.checkbox4) hbox2.addWidget(self.checkbox5) hbox3 = QHBoxLayout() hbox3.addWidget(self.pushbutton) vbox = QVBoxLayout() vbox.addLayout(hbox1) vbox.addLayout(hbox2) vbox.addLayout(hbox3) self.setLayout(vbox) def createTable(self): is_checked_1 = self.checkbox1.isChecked() is_checked_2 = self.checkbox2.isChecked() is_checked_3 = self.checkbox3.isChecked() is_checked_4 = self.checkbox4.isChecked() is_checked_5 = self.checkbox5.isChecked() # 先清空之前的表格 for i in reversed(range(self.layout().count())): widgetToRemove = self.layout().itemAt(i).widget() if widgetToRemove: self.layout().removeWidget(widgetToRemove) widgetToRemove.setParent(None) # 获取勾选项的数量 rows = 0 if is_checked_1: rows += 1 if is_checked_2: rows += 1 if is_checked_3: rows += 1 columns = 2 # 创建表格 tableWidget = QTableWidget() tableWidget.setRowCount(rows) tableWidget.setColumnCount(columns) tableWidget.setHorizontalHeaderLabels(['Column 1', 'Column 2']) # 添加表格到布局中 self.layout().addWidget(tableWidget) if name == 'main': app = QApplication(sys.argv) widget = MyWidget() widget.show() sys.exit(app.exec());以上代码中,在creatTable环节,需要根据checkbutton4和chechbutton5的勾选数量情况,动态添加对应数量的tablewidget,当无勾选时,不添加表格,勾选checkbutton4时,填加一个编号为4的tablewidgr=et,勾选checkbutton5时,填加一个编号为5的tablewidgr=et.帮我改一下
时间: 2024-03-07 21:52:21 浏览: 171
以下是修改后的代码:
```
from PySide6.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout, QCheckBox, QPushButton, QTableWidgetItem, QTableWidget
import sys
from PySide6.QtCore import Qt
class MyWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 设置窗口大小和标题
self.setGeometry(300, 300, 500, 300)
self.setWindowTitle('My Widget')
# 创建组件
self.checkbox1 = QCheckBox('Option 1')
self.checkbox2 = QCheckBox('Option 2')
self.checkbox3 = QCheckBox('Option 3')
self.checkbox4 = QCheckBox('Option 4')
self.checkbox5 = QCheckBox('Option 5')
self.pushbutton = QPushButton('Create Table')
self.pushbutton.clicked.connect(self.createTable)
# 创建布局
hbox1 = QHBoxLayout()
hbox1.addWidget(self.checkbox1)
hbox1.addWidget(self.checkbox2)
hbox1.addWidget(self.checkbox3)
hbox2 = QHBoxLayout()
hbox2.addWidget(self.checkbox4)
hbox2.addWidget(self.checkbox5)
hbox3 = QHBoxLayout()
hbox3.addWidget(self.pushbutton)
vbox = QVBoxLayout()
vbox.addLayout(hbox1)
vbox.addLayout(hbox2)
vbox.addLayout(hbox3)
self.setLayout(vbox)
def createTable(self):
is_checked_4 = self.checkbox4.isChecked()
is_checked_5 = self.checkbox5.isChecked()
# 先清空之前的表格
for i in reversed(range(self.layout().count())):
widgetToRemove = self.layout().itemAt(i).widget()
if widgetToRemove:
self.layout().removeWidget(widgetToRemove)
widgetToRemove.setParent(None)
# 获取勾选项的数量
rows = 0
if is_checked_4:
rows += 1
if is_checked_5:
rows += 1
columns = 2
# 添加表格到布局中
if rows > 0:
tableWidget = QTableWidget()
tableWidget.setRowCount(rows)
tableWidget.setColumnCount(columns)
tableWidget.setHorizontalHeaderLabels(['Column 1', 'Column 2'])
if is_checked_4:
tableWidget.setObjectName('4')
self.layout().addWidget(tableWidget)
if is_checked_5:
tableWidget = QTableWidget()
tableWidget.setObjectName('5')
tableWidget.setRowCount(1)
tableWidget.setColumnCount(columns)
tableWidget.setHorizontalHeaderLabels(['Column 1', 'Column 2'])
self.layout().addWidget(tableWidget)
def closeEvent(self, event):
super().closeEvent(event)
sys.exit()
if __name__ == '__main__':
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec())
```
在上面的代码中,我们在`createTable`方法中先获取了`checkBox4`和`checkBox5`的选中状态。然后根据选中状态动态添加表格。如果都没有选中,则不添加表格。如果`checkBox4`被选中,则添加一个编号为4的表格;如果`checkBox5`被选中,则添加一个编号为5的表格。我们对添加表格的过程进行了一些小修改,以便在后续的代码中更方便地进行检索。同时,我们也添加了一个关闭窗口的事件处理,以确保程序能够正常退出。
阅读全文