LISHUZUOXUN_yangjiang/LSZXPagesManagerLibrary/test1.py

117 lines
4.7 KiB
Python

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.id = None
self.name = None
self.table_widget = QTableWidget()
self.table_widget.setFixedSize(500, 300)
self.setLayout(QVBoxLayout())
self.layout().addWidget(self.table_widget)
# 模拟数据
data = [
{"name": "张三", "id": 20},
{"name": "李四", "id": 21},
{"name": "王五", "id": 22}
]
self.names = ["张三", "李四", "王五"] # 用于下拉框的选项
self.table_widget.setColumnCount(3)
self.table_widget.setHorizontalHeaderLabels(["姓名", "ID", "操作"])
for row_index, row_data in enumerate(data):
self.table_widget.insertRow(row_index)
self.table_widget.setItem(row_index, 0, QTableWidgetItem(row_data["name"]))
self.table_widget.setItem(row_index, 1, QTableWidgetItem(str(row_data["id"])))
# 创建水平布局,用于放置切换按钮和删除按钮
h_layout = QHBoxLayout()
# 创建 QStackedWidget 用于切换编辑和更新按钮
stacked_widget = QStackedWidget()
edit_button = QPushButton("编辑")
update_button = QPushButton("更新")
stacked_widget.addWidget(edit_button)
stacked_widget.addWidget(update_button)
h_layout.addWidget(stacked_widget)
# 添加删除按钮
delete_button = QPushButton("删除")
h_layout.addWidget(delete_button)
self.table_widget.setCellWidget(row_index, 2, QWidget())
self.table_widget.cellWidget(row_index, 2).setLayout(h_layout)
edit_button.clicked.connect(lambda _, row=row_index: self.edit_row(row)) # 连接编辑按钮的点击信号
update_button.clicked.connect(lambda _, row=row_index: self.update_row(row)) # 连接更新按钮的点击信号
delete_button.clicked.connect(lambda _, row=row_index: self.delete_row(row)) # 连接删除按钮的点击信号
self.table_widget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
# 使表格行高和列宽自适应
self.table_widget.verticalHeader().setDefaultSectionSize(50)
def edit_row(self, row):
print(f"编辑行 {row}: 姓名 - {self.table_widget.item(row, 0).text()}, ID - {self.table_widget.item(row, 1).text()}")
self.name = self.table_widget.item(row, 0).text()
self.id = self.table_widget.item(row, 1).text()
# 隐藏原来的表格项内容
self.table_widget.item(row, 0).setFlags(Qt.ItemIsEnabled)
self.table_widget.item(row, 1).setFlags(Qt.ItemIsEnabled)
# 创建下拉框
name_combo = QComboBox()
name_combo.addItems(self.names)
name_combo.setCurrentText(self.table_widget.item(row, 0).text())
# 创建输入框
self.age_edit = QLineEdit(self.table_widget.item(row, 1).text())
# 隐藏原来的表格项显示
self.table_widget.setItem(row, 0, QTableWidgetItem(""))
self.table_widget.setItem(row, 1, QTableWidgetItem(""))
self.table_widget.setCellWidget(row, 0, name_combo)
self.table_widget.setCellWidget(row, 1, self.age_edit)
# 切换到更新按钮
stacked_widget = self.table_widget.cellWidget(row, 2).layout().itemAt(0).widget()
stacked_widget.setCurrentIndex(1)
def update_row(self, row):
print(f"更新行 {row}: 姓名 - {self.name}, ID - {self.age_edit.text()}")
new_name = self.table_widget.cellWidget(row, 0).currentText()
new_age = self.table_widget.cellWidget(row, 1).text()
self.table_widget.setItem(row, 0, QTableWidgetItem(new_name))
self.table_widget.setItem(row, 1, QTableWidgetItem(new_age))
# 显示原来的表格项内容,并恢复其可编辑状态
self.table_widget.item(row, 0).setFlags(Qt.ItemIsEnabled | Qt.ItemIsEditable)
self.table_widget.item(row, 1).setFlags(Qt.ItemIsEnabled | Qt.ItemIsEditable)
# 移除下拉框和输入框
self.table_widget.setCellWidget(row, 0, None)
self.table_widget.setCellWidget(row, 1, None)
# 切换回编辑按钮
stacked_widget = self.table_widget.cellWidget(row, 2).layout().itemAt(0).widget()
stacked_widget.setCurrentIndex(0)
def delete_row(self, row):
print(f"删除行 {row}: 姓名 - {self.table_widget.item(row, 0).text()}, ID - {self.table_widget.item(row, 1).text()}")
self.table_widget.removeRow(row)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()