代码如下:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QPushButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.data_lst = ['cam', 'cpu', 'mem', 'demo'] # 数据列表
# 创建表格控件
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(2) # 设置列数,多加一列用于放置删除按钮
self.tableWidget.setHorizontalHeaderLabels(['Data', '']) # 设置表头
# 创建布局并将表格控件添加到布局中
layout = QVBoxLayout()
layout.addWidget(self.tableWidget)
# 创建主窗口,并将布局设置为主窗口的中央部件
centralWidget = QWidget()
centralWidget.setLayout(layout)
self.setCentralWidget(centralWidget)
# 渲染数据
self.renderData()
def renderData(self):
self.tableWidget.setRowCount(len(self.data_lst)) # 设置行数
for row, data in enumerate(self.data_lst):
item = QTableWidgetItem(data)
self.tableWidget.setItem(row, 0, item)
# 创建按钮并放置到表格中
deleteButton = QPushButton('Delete')
self.tableWidget.setCellWidget(row, 1, deleteButton)
# 绑定按钮的点击事件
deleteButton.clicked.connect(lambda _, r=row: self.deleteRow(r))
def deleteRow(self, row):
if row < self.tableWidget.rowCount(): # 检查索引是否有效
self.tableWidget.removeRow(row)
del self.data_lst[row] # 同时删除data_lst中对应的元素
self.renderData() # 更新表格数据
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())