|
发表于 2023-12-8 15:03:42
|
显示全部楼层
首先,我们需要在Qt Designer中创建一个窗口,然后添加以下控件:
1. QCheckBox:用于启用/禁用A表格和生成按钮。
2. QLineEdit:用于输入行数。
3. QTableWidget:作为A表格,设置列数为3,并禁用状态。
4. QPushButton:用于生成按钮。
5. 另外一个QTableWidget:作为B表格。
然后,您可以使用以下代码加载设计文件,并编写相应的逻辑:
- from PySide6.QtWidgets import QApplication, QMainWindow
- from PySide6.QtCore import Slot
- from ui_mainwindow import Ui_MainWindow
- class MainWindow(QMainWindow, Ui_MainWindow):
- def __init__(self):
- super().__init__()
- self.setupUi(self)
-
- # 初始时禁用A表格
- self.tableWidget_A.setEnabled(False)
-
- # 连接信号槽
- self.checkBox.stateChanged.connect(self.toggleTableAndButtons)
- self.pushButton_generate.clicked.connect(self.generateButtons)
-
- @Slot(int)
- def toggleTableAndButtons(self, state):
- if state == 0:
- # 禁用A表格
- self.tableWidget_A.setEnabled(False)
- else:
- # 启用A表格
- self.tableWidget_A.setEnabled(True)
-
- @Slot()
- def generateButtons(self):
- try:
- row_count = int(self.lineEdit.text())
- except ValueError:
- return
-
- # 清空B表格的行数
- self.tableWidget_B.setRowCount(0)
-
- # 根据行数生成按钮,并连接信号槽
- for row in range(row_count):
- button = QPushButton(f"Button {row+1}")
- button.clicked.connect(lambda checked, r=row: self.setBTableRows(r))
- self.verticalLayout_buttons.addWidget(button)
-
- @Slot(int)
- def setBTableRows(self, row):
- # 根据A表格的行内容设置B表格的行数
- value = self.tableWidget_A.item(row, 0).text()
- try:
- row_count = int(value)
- except ValueError:
- return
-
- self.tableWidget_B.setRowCount(row_count)
- app = QApplication([])
- window = MainWindow()
- window.show()
- app.exec()
复制代码
注意,在上面的代码中,我们使用了一个名为`ui_mainwindow.py`的特殊文件来将设计文件转化为可用的类。您需要使用`pyside6-uic`工具从设计文件生成该文件。使用以下命令:
- pyside6-uic mainwindow.ui -o ui_mainwindow.py
复制代码
确保使用正确的文件名和路径。
希望这可以帮助您实现所需的功能!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|