Как получить значение из списка 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_())
