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_())
