как получить значения элементов из QListView в pyqt5?

#python #qt #pyqt #pyqt5 #pyside

#python #qt #pyqt #pyqt5 #pyside

Вопрос:

После подключения к моей базе данных я пытаюсь получить все значения элементов из QListView, но в нем нет метода text() или чего-либо еще, я пытался использовать model.data(), но он возвращает следующую ошибку:

Файл «c:UsersinterDesktopneosunmain копировать 9.py «, строка 88, в addToPlaylist item = model.data(индекс, 1, Qt.DisplayRole) Ошибка типа: данные (self, QModelIndex, роль: int = Qt.DisplayRole): аргумент 1 имеет неожиданный тип ‘int’

 class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setGeometry(900,180,800,600)
        self.setWindowTitle("Media Display")
        self.setWindowIcon(QIcon('favicon.png'))
        self.model = QSqlQueryModel()
        self.model.setQuery("SELECT path FROM files")
        
        self.listview = QListView()
        self.listview.setModel(self.model)
        self.listview.setModelColumn(1)    
        self.getData()

    
    def getData(self):
        model = self.listview.model()
        for index in range(model.rowCount()):
            # item = model.data(index)
            item = model.data(index, 1, Qt.DisplayRole)
            print(item)
    
 
 

Комментарии:

1. Привет, ошибка не имеет ничего общего с самим вопросом. Ошибка сообщает вам, что ваш аргумент является целым числом, хотя он не должен быть или не является правильным. Поэтому, пожалуйста, уточните, в чем заключается ваш вопрос. Речь идет о решении ошибки или вопроса о том, как получить элемент из определенного индекса в виджете QListView ?

Ответ №1:

Qt использует класс QModelIndex для поиска данных в любой модели, поэтому вы не можете просто использовать целые числа для доступа к ним, но model.index(row, column, parent=None) должны использоваться вместо этого (необязательный родительский аргумент предназначен для многомерных моделей, таких как древовидные модели).

     def getData(self):
        model = self.listview.model()
        for row in range(model.rowCount()):
            index = model.index(row, 1)
            item = model.data(index, Qt.DisplayRole)
            print(item)
 

Комментарии:

1. Большое вам спасибо, это работает, только в индексе столбец равен 0, потому что я установил для столбца модели значение 1

2. Вы установили столбец модели, который отображается в представлении , но структура модели не меняется. В вашем вопросе вы пытались получить данные из второго столбца (1), поэтому я просто использовал это значение на основе вашего кода.