import sys from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout from PyQt5.QtCore import Qt class Table(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('QTableWidget with CheckBoxes') self.resize(600, 300) # 创建表格 self.tableWidget = QTableWidget() self.tableWidget.setRowCount(4) self.tableWidget.setColumnCount(5) # 设置表头 self.tableWidget.setHorizontalHeaderLabels(['选择', '序号', '帧头数据匹配(HEX)', '字段偏移地址', '字段数据类型']) # 填充数据,并为每一行的第一列添加复选框 items = [ ['1', '01 F4', '5', '双字节有符号整数'], ['2', '01 F4', '7', '双字节有符号整数'], ['3', '00 F4', '0', '双字节有符号整数'], ['4', '00 F4', '8', '双字节有符号整数'] ] for row in range(len(items)): # 添加复选框到第一列 checkboxItem = QTableWidgetItem() checkboxItem.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) checkboxItem.setCheckState(Qt.Unchecked) # 或者使用 Qt.Checked 来默认勾选 self.tableWidget.setItem(row, 0, checkboxItem) # 填充其他列的数据 for col in range(len(items[row])): item = QTableWidgetItem(items[row][col]) self.tableWidget.setItem(row, col + 1, item) # 注意:从第二列开始填充数据 # 设置表格为只读(除了复选框) self.tableWidget.setEditTriggers(QTableWidget.NoEditTriggers) # 设置表格为不可调整大小 self.tableWidget.horizontalHeader().setStretchLastSection(True) # 创建一个垂直布局并添加表格到布局中 layout = QVBoxLayout() layout.addWidget(self.tableWidget) # 设置窗口的布局 self.setLayout(layout) if __name__ == '__main__': app = QApplication(sys.argv) table = Table() table.show() sys.exit(app.exec_())