Как получить дочерний элемент pyqt qtreeview, используя событие двойного щелчка?

Я использую PyQt4 и Python 2.7.9. У меня есть QTreeView, который содержит данные из базы данных Oracle. код такой:

model = QStandardItemModel(0,1)
self.treeMedia.setModel(model)
for rowalb in self.SELECT_TREE_ALBUM(codus):
    nodeItem = QStandardItem(str(rowalb[1]).decode('utf-8'))
    for rowph in self.SELECT_TREE_PHOTO(int(rowalb[0])):
        childItem = QStandardItem(str(rowph[0]))
        childItem.setEditable(False)
        nodeItem.insertRows(0, [childItem])
    nodeItem.setEditable(False)
    model.appendRow(nodeItem)
model.setHorizontalHeaderLabels(['Data'])

SELECT_TREE_ALBUM (код является идентификатором владельца альбома) и SELECT_TREE_PHOTO - это функции, которые возвращают данные из базы данных. Rowalb 1 - это имя альбома, а rowalb[0] - это идентификатор, rowalb[0] используется для получения фотографии этого альбома. На рисунке показан этот вид:

Я хочу получить данные childItem (например, 1491475964461012, 1491475821127693, 1491475631127712, 1491475141127761 или 1480407552234520), используя событие двойного щелчка. Я попытался поместить этот код в конструктор:

self.treeMedia.doubleClicked.connect(self.treeMedia_doubleClicked)

и после этого я добавил функцию:

def treeMedia_doubleClicked(self,index):
    item = self.treeMedia.model().item(index.row(),index.column())
    strData = item.data(0).toPyObject()
    #self.treeMedia.currentIndex()
    print('' + str(strData))

но иногда я вижу информацию об nodeItem (например, "ror"или"fotos de perfil") и другие, которые я получаю эту ошибку: "AttributeError: объект 'NoneType' не имеет атрибута 'data'". В чем может быть проблема? проблема в заполнении qtreeview? или проблема в функции события двойного щелчка при использовании индекса? Пожалуйста, помогите мне. Заранее спасибо.

2 ответа

Решение

Если кто-то ищет ответ.

def treeMedia_doubleClicked(self,index):
    item = self.treeView.selectedIndexes()[0]
    print item.model().itemFromIndex(index).text()

Я понимаю, что это немного вырвано из контекста, но пишу здесь для других прохожих...

в pyside6 любая из этих работ

      def treeMedia_doubleClicked(self, index):
    print(self.name_of_model.filePath(index))

или же

      def treeMedia_doubleClicked(self, index):
    print(index.model().filePath(index))
Другие вопросы по тегам