如何从 QTableView 的选定行中获取值?
How do I get values form selected rows of a QTableView?
我正在使用 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)
是identity[row]
抛出了这个异常。假设您从 table 行中选择了第 2 行和第 3 行。然后在 for row in data:
循环的第一次迭代中,row
的值将为 2,而您的 identity
列表将为 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
每个选定行仅 returns 一个索引。
我正在使用 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)
是identity[row]
抛出了这个异常。假设您从 table 行中选择了第 2 行和第 3 行。然后在 for row in data:
循环的第一次迭代中,row
的值将为 2,而您的 identity
列表将为 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
每个选定行仅 returns 一个索引。