Python. Получение индексов из QListView c QStringlListModel

Пытаюсь получить индекс выделенного элемента из модели, привязанной к QlistView. Однако, .selectedIndexes выдает, судя по всему пустой пустой список (функция test - проверка дает False)

Индекс предполагается передавать в другую функцию.

class MainWindow(QMainWindow):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.initUi()
        self.connectUi()

    def initUi(self):
        self.testlist = QListView()
        self.listmodel = QtCore.QStringListModel([])
        self.centralWidget = QWidget(self)



    def connectUi(self):

        self.btn1.clicked.connect(self.get_files_paths_and_read_files)
        self.btn4.clicked.connect(self.test)

    def test(self):
        print(self.testlist.selectedIndexes() == True)


    def get_files_paths_and_read_files(self):
        ResearchsList = []
        datas = []
        paths, _ = QtWidgets.QFileDialog.getOpenFileNames(...)
        for path, data in zip(paths, range(len(paths))):
            ResearchsList.append([])
            datas.append([])
            datas[-1] = pd.read_excel(path).iloc[:, 0:5]
            ResearchsList[-1] = path[path.rfind("/")+1:path.rfind(".")]

        self.listmodel = QtCore.QStringListModel(ResearchsList)
        self.testlist.setModel(self.listmodel)

Ответы (1 шт):

Автор решения: S. Nick

QAbstractItemView::selectedIndexes()

Эта удобная функция возвращает список всех выбранных и не скрытых индексов элементов в представлении. Список не содержит дубликатов и не отсортирован.

я дополню то что сказал @gil9red примером

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.centralWidget = QWidget(self)
        self.setCentralWidget(self.centralWidget)

        self.btn1 = QPushButton('Заполните QListView')
        self.btn4 = QPushButton('Получить индекс выбранного элемента')

        self.initUi()

        layout = QVBoxLayout(self.centralWidget) 
        layout.addWidget(self.testlist)
        layout.addWidget(self.btn1)
        layout.addWidget(self.btn4)

        self.connectUi()

    def initUi(self):
        self.testlist = QListView()
        self.listmodel = QtCore.QStringListModel([])
#        self.centralWidget = QWidget(self)

    def connectUi(self):
        self.btn1.clicked.connect(self.get_files_paths_and_read_files)
        self.btn4.clicked.connect(self.test)

    def test(self):
#        print(self.testlist.selectedIndexes() == True)
        print(f'\nQAbstractItemView::selectedIndexes() -> {self.testlist.selectedIndexes()}')
        print(f'type -> {type(self.testlist.selectedIndexes())}')
        if self.testlist.selectedIndexes():
            print(f"Вы выбрали строку с индексом -> {self.testlist.selectedIndexes()[0].row()}")
        else: print("Вы ничего не выбрали !")


    def get_files_paths_and_read_files(self):
        ResearchsList = ['item1', 'item2', 'item3', 'item4', 'item5', ]
        datas = ['data1', 'data2', 'data3', 'data4', 'data5', ]

        '''
        paths, _ = QtWidgets.QFileDialog.getOpenFileNames(...)
        for path, data in zip(paths, range(len(paths))):
            ResearchsList.append([])
            datas.append([])
            datas[-1] = pd.read_excel(path).iloc[:, 0:5]
            ResearchsList[-1] = path[path.rfind("/")+1:path.rfind(".")]
        '''

        self.listmodel = QtCore.QStringListModel(ResearchsList)
        self.testlist.setModel(self.listmodel)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_()) 

введите сюда описание изображения

→ Ссылка