59 lines
2.1 KiB
Python
Raw Permalink Normal View History

2025-03-14 16:15:51 +08:00
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_())