Как получить значение из списка QListView?

lv = QtWidgets.QListView()
slm = QtCore.QStringListModel(['1','2','3'])
lv.setModel(slm)
lv.doubleClicked.connect(item_clicked)

Как по двойному щелчку мыши извлечь соответствующее значение из списка?

P.S. имеющийся похожий ответ не помог, только начинаю осваивать pyqt многое не понятно.


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

Автор решения: Alexander Chernin

Написать слот с аргументом типа QModelIndex:

from PyQt5 import Qt

lv = QtWidgets.QListView()
slm = QtCore.QStringListModel(['1','2','3'])
lv.setModel(slm)
lv.doubleClicked.connect(item_clicked)

def item_clicked(modelIndex):
    # Получить значение можно так
    # role=Qt.DisplayRole можно не указывать
    print('{}'.format(modelIndex.data(role=Qt.DisplayRole).value()))

Либо, если слот это метод класса, то так:

from PyQt5 import Qt

class SomeClass:
    ...
    def item_clicked(self, modelIndex):
        # Получить значение можно так
        # role=Qt.DisplayRole можно не указывать
        print('{}'.format(modelIndex.data(role=Qt.DisplayRole).value()))
→ Ссылка
Автор решения: S. Nick

Как вариант:

import sys
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QStringListModel, Qt
from PyQt5.QtWidgets import QApplication, QWidget, QListView, QLabel, QHBoxLayout, QAbstractItemView


class Demo(QWidget):
    def __init__(self):
        super(Demo, self).__init__()

        self.item_list = ['item %s' % i for i in range(11)]          
        self.model = QStringListModel(self)
        self.model.setStringList(self.item_list)

        self.listview = QListView(self)                           
        self.listview.setModel(self.model)
        self.listview.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.listview.doubleClicked.connect(self.change_func)

        self.h_layout = QHBoxLayout()
        self.h_layout.addWidget(self.listview)
        self.setLayout(self.h_layout)

    def change_func(self, index): 
        print(self.listview.currentIndex().data())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

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

→ Ссылка