【问题标题】:How do I get values form selected rows of a QTableView?如何从 QTableView 的选定行中获取值?
【发布时间】:2018-08-12 06:42:09
【问题描述】:

我正在使用 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)

【问题讨论】:

标签: python pyqt selection qtableview


【解决方案1】:

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

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】:

    identity[row] 引发了这个异常。想象一下,您从表的第 2 行和第 3 行中进行了选择。然后在您的 for row in data: 循环的第一次迭代中,row 的值将是 2,而您的 identity 列表当时将是一个元素。

    调试并修复您的逻辑。

    【讨论】:

      猜你喜欢
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多