Как получить значения из выбранных строк 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)

person And3r50n 1    schedule 04.03.2018    source источник
comment
возможный дубликат stackoverflow.com/questions/22577327/   -  person eyllanesc    schedule 04.03.2018


Ответы (2)


Проблема здесь вызвана запутанным методом, который вы используете для заполнения списков значений. Я бы предложил следующее упрощение:

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 возвращает только один индекс для каждой выбранной строки.

person ekhumoro    schedule 04.03.2018

Это identity[row] вызывает эти исключения. Представьте, что вы выбрали из таблицы строки 2 и 3. Затем в первой итерации вашего цикла for row in data: значение row будет равно 2, а ваш список identity будет состоять из одного элемента.

Отладьте и исправьте свою логику.

person Andrei Boyanov    schedule 04.03.2018