TableModel失效的问题

本文记录了作者在使用TableModel过程中遇到的问题及解决办法。发现TableModel需在Database连接后立即定义,否则将无法正常读写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    
    今天在写一个小应用时,本来很快就搞定了,可是遭遇到TableModel怎么都不好使,无法读取,无法写入。
    
    浪费很多时间终于发现,我的Database和TableModel对象直接在类中定义,然后在类的构造函数中设定数据库名和连接数据库。TableModel好像只能在构造函数指定Database对象,也就是说必须在Database指定连接数据库之后在定义初始化TableModel对象,否则无法使用。
class TableModel(QAbstractTableModel): def __init__(self, data=None, headers=None, parent=None): super().__init__(parent) # 初始化数据(二维列表:每行是一个列表,对应表格的一行数据) #self._data = data if data else [] self._data = [] # 列标题(列表,如["姓名", "年龄", "性别"]) #self._headers = headers if headers else [] self._headers = ["SID", "Time", "Chn", "T/Rx", "ID_index", " SendType", "RemoteFlag", "ExternFlag", "Len", "Data(hex)", "button"] def rowCount(self, parent=QModelIndex()): #"""返回行数(必须重写)""" return len(self._data) def columnCount(self, parent=QModelIndex()): #"""返回列数(必须重写)""" # new 0722 # return len(self._headers) if self._data else 0 return len(self._headers) # new 0722 # 单元格数据 def data(self, index, role=Qt.DisplayRole): #"""返回指定位置的数据(必须重写)""" # new 0723 if role == Qt.TextAlignmentRole: return Qt.AlignCenter # new 0723 if not index.isValid() or role != Qt.DisplayRole: return None # 仅处理显示角色(DisplayRole) row = index.row() col = index.column() # new 0723 if role == Qt.DisplayRole and col == 0: value = self._data[row][col].split(" ")[0] return str(value) # new 0723 if row >= len(self._data) or col >= len(self._headers): return None return self._data[row][col] # 返回第row行第col列的数据 # 表头 def headerData(self, section, orientation, role=Qt.DisplayRole): #"""返回列标题(可选重写)""" if orientation == Qt.Horizontal and role == Qt.DisplayRole: return self._headers[section] if section < len(self._headers) else None # new 添加行号行头 0721 if orientation == Qt.Vertical and role == Qt.DisplayRole: return str(section + 1) # new 添加行号行头 0721 return None # 垂直标题(行号)默认使用行索引,无需额外处理 def add_row(self, row_data): #"""动态添加一行数据(触发视图更新)""" # 通知视图:开始插入行(参数:父索引、插入位置起始行、结束行) self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount()) self._data.append(row_data) # 实际添加数据到模型 self.endInsertRows() # 通知视图:插入完成 # def update_data(self, row, col, new_value): # #"""更新指定位置的数据(触发视图刷新)""" # if 0 <= row < len(self._data) and 0 <= col < len(self._headers): # self._data[row][col] = new_value # # 通知视图:指定位置数据已修改(参数:起始索引、结束索引) # self.dataChanged.emit(self.index(row, col), self.index(row, col)) # new 清理表格功能 0721 def clear_Table(self): rows = self.rowCount() if rows > 0: # self.beginResetModel(QModelIndex(), 0, rows -1) # new 0722 self.beginResetModel() self._data = [] # 清空数据 self.endResetModel() # 通知视图重置完成 该代码怎么进行优化,删除旧内存
最新发布
07-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值