代码之家  ›  专栏  ›  技术社区  ›  And3r50n 1

如何从QTableView的选定行中获取值?

  •  0
  • And3r50n 1  · 技术社区  · 7 年前

    我正在使用QTableView并尝试从所选行检索值。其他时候,我将使用以下方法处理多行:

    self.tableView5.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)
    

    以下代码有效,但仅在选择第一行时有效。然而,它表明:

    identity[row].append(str(self.table_model5.data(index)))
    IndexError: list index out of range
    

    单击另一行时。

    names = []
    emails = []
    identity = []
    data = sorted(set(index.row() for index in self.tableView5.selectionModel().selectedRows()))
    for row in data:
        identity.append([])
        for column in range(0,2):
            index = self.table_model5.index(row, column)
            identity[row].append(str(self.table_model5.data(index)))
    for item in identity:
        names.append(item[0])
        emails.append(item[1])
    for name, recipient in zip(names, emails):
        print(name, recipient)
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   ekhumoro    7 年前

    这里的问题是由用于填充值列表的复杂方法引起的。我建议进行以下简化:

    names = []
    emails = []
    identity = []
    for index in sorted(self.tableView5.selectionModel().selectedRows()):
        row = index.row()
        name = self.table_model5.data(self.table_model5.index(row, 0))
        email = self.table_model5.data(self.table_model5.index(row, 1))
        identity.append((name, email))            
        names.append(name)
        emails.append(email)
    

    请注意,不需要使用 set 因为 selectedRows 每个选定行仅返回一个索引。

        2
  •  0
  •   Andrei Boyanov    7 年前

    它是 identity[row] 这引发了这种例外。假设您从表的第2行和第3行中进行了选择。然后在 for row in data: 循环的值 row 当您的 identity 此时列表将为一个元素长。

    调试并修复逻辑。