You need to enable JavaScript to run this app. 如何将mediaPlayer.position()数据写入QTableWidget的已创建空行
优惠活动
大模型
产品
解决方案
定价
更多

如何将mediaPlayer.position()数据写入QTableWidget的已创建空行

问题根因

你的代码核心错误是QTableWidget行索引取值越界:
QTableWidget的行索引从0开始计数,rowCount()返回的是表格当前的总行数,有效行索引的最大值为rowCount() - 1。你直接用rowCount()作为写入目标行的索引,实际是向不存在的行写入数据,因此表格不会有内容显示。

解决方案

根据你的使用逻辑(先插入空行,再向最新插入的空行写入起始/结束时间),修改写入逻辑的行索引取值即可:

  1. 将startHere、endHere方法中的row = self.table.rowCount()改为row = self.table.rowCount() - 1
  2. 可以新增边界判断,避免用户未提前插入空行就触发快捷键导致的异常

修正后代码示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 15:30:04