如何将mediaPlayer.position()数据写入QTableWidget的已创建空行
问题根因
你的代码核心错误是QTableWidget行索引取值越界:
QTableWidget的行索引从0开始计数,rowCount()返回的是表格当前的总行数,有效行索引的最大值为rowCount() - 1。你直接用rowCount()作为写入目标行的索引,实际是向不存在的行写入数据,因此表格不会有内容显示。
解决方案
根据你的使用逻辑(先插入空行,再向最新插入的空行写入起始/结束时间),修改写入逻辑的行索引取值即可:
- 将
startHere、endHere方法中的row = self.table.rowCount()改为row = self.table.rowCount() - 1 - 可以新增边界判断,避免用户未提前插入空行就触发快捷键导致的异常
修正后代码示例
def addSub(self): row = self.table.rowCount() self.table.insertRow(row) def startHere(self): # 无可用行时自动新增空行 if self.table.rowCount() == 0: self.addSub() # 取最后一行的有效索引 row = self.table.rowCount() - 1 newStart = self.mediaPlayer.position() self.table.setItem(row, 0, QTableWidgetItem(str(newStart))) def endHere(self): if self.table.rowCount() == 0: self.addSub() row = self.table.rowCount() - 1 newEnd = self.mediaPlayer.position() self.table.setItem(row, 1, QTableWidgetItem(str(newEnd)))
可选优化方案
如果你需要支持修改历史行、或者需要明确指定当前编辑的行,可以新增变量记录当前编辑的行索引,避免每次都取最后一行:
# 类初始化时新增属性 def __init__(self): # 原有初始化代码 self.current_edit_row = -1 def addSub(self): row = self.table.rowCount() self.table.insertRow(row) # 每次插入新行后自动切换为当前编辑行 self.current_edit_row = row def startHere(self): if self.current_edit_row == -1: self.addSub() newStart = self.mediaPlayer.position() self.table.setItem(self.current_edit_row, 0, QTableWidgetItem(str(newStart))) def endHere(self): if self.current_edit_row == -1: self.addSub() newEnd = self.mediaPlayer.position() self.table.setItem(self.current_edit_row, 1, QTableWidgetItem(str(newEnd)))
附:程序界面参考

内容的提问来源于stack exchange,提问作者StuDig
相关产品推荐
相关产品推荐

