如果列不存在,则创建它并设置文本 - 如果它确实存在,则检查文本并使用下一列(如果已填充)

If column doesn't exist, create it and setText - if it does exist, check for text and use next column if filled

实际上我想增加列数,第一列是3,最初是不存在的。生成该列,并用标签中的文本填充它。对于后续操作,检查第 3 行的第 3 行是否有文本,如果有 - 创建一个新列,如果没有,则设置标签

中的文本

这是我目前所做的,目前它会适当地增加列生成,但是当我转到列表中的下一个项目时它会继续增加。我希望它返回并再次检查第 3 列中的文本

def gen_cols(self, row, col, header):
    item = self.table.item(row, col)
    if item is None:
        item = QTableWidgetItem()
        header_item = QtWidgets.QTableWidgetItem(header)
        self.table.insertColumn(col)
        self.table.setHorizontalHeaderItem(col, header_item)
        self.table.setItem(row, col, item)
    return item

def update_table(self, s):
    header = 'Image: ' + str(self.count)
    row = self.table.currentItem().row()
    self.col = self.table.columnCount()

    # item = self.gen_cols(row, col, header)
    item = self.table.item(row, self.col)
    if not item:
        item = self.gen_cols(row, self.col, header)
        item.setText(s)
    self.count += 1

QTableWidget有点奇怪,因为即使模型有指定的行数和列数,如果没有设置数据,item()可能returnNone[=16] =]

QTableWidgetItem 仅在以下两种情况下 returned:

  • 使用 setItem();
  • 以编程方式创建了一个项目
  • 数据已被用户输入;

这意味着,对于您所需要的,仅检查 item() 是否 return None 是不够的,您必须先检查索引是否真正有效创建一个新列。在您的情况下,如果索引的列少于列数,我们可以假设索引有效。

def update_table(self, s):
    row = self.table.currentItem().row()
    maxColumn = self.table.columnCount()
    col = 2
    while col < maxColumn:
        item = self.table.item(row, col)
        if item is None:
            item = QTableWidgetItem()
            self.table.setItem(row, col, item)
        if not item.text():
            break
        col += 1
    else:
        header = 'Image: ' + str(self.count)
        item = self.gen_cols(row, col, header)
    
    item.setText(s)
    self.count += 1