59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
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_()) |