При общей модели QAbstractListModel в виджете child_list_view не отображаются вложенные элементы, родитель которых выбран в parent_list_view

Помогите пожалуйста. Есть два списка QListView которые используют одну и ту же модель, основанную на QAbstractListModel. Данные представляют собой список со вложенными элементами. В первом списке отображаются только родительские элементы списка. Нужно чтобы при выборе родительского элемента в первом списке во втором списке отображались вложенные элементы для выбранного в первом списке родительского. Есть такой код, но данные во втором списке не отображаются.

from PySide6.QtCore import Qt, QAbstractListModel, QModelIndex
from PySide6.QtWidgets import QApplication, QListView, QVBoxLayout, QWidget
import sys


class NestedListModel(QAbstractListModel):
    def __init__(self, _data, parent=None):
        super(NestedListModel, self).__init__(parent)
        self.list_data = _data

    def rowCount(self, parent=QModelIndex()):
        if parent.isValid():
            parent_item = parent.internalPointer()
            return len(parent_item['children'])
        else:
            return len(self.list_data)

    def columnCount(self, parent=None):
        return 1

    def data(self, index, role=Qt.DisplayRole):
        if not index.isValid():
            return None
        if role == Qt.DisplayRole:
            if index.parent().isValid():
                parent_item = index.parent().internalPointer()
                return parent_item['children'][index.row()]['name']
            else:
                return self.list_data[index.row()]['name']

    def index(self, row=int, column=0, parent=QModelIndex()):
        if not self.hasIndex(row, column, parent):
            return QModelIndex()
        if parent.isValid():
            parent_item = parent.internalPointer()
            child_item = parent_item['children'][row]
            return self.createIndex(row, column, child_item)
        else:
            parent_item = self.list_data[row]
            return self.createIndex(row, column, parent_item)

    def flags(self, index):
        if not index.isValid():
            return Qt.NoItemFlags
        return Qt.ItemIsEnabled | Qt.ItemIsSelectable


if __name__ == "__main__":
    app = QApplication(sys.argv)

    # Создаем данные для модели
    data = [
        {'name': 'Parent 1', 'children': [{'name': 'Child 1'}, {'name': 'Child 2'}]},
        {'name': 'Parent 2', 'children': [{'name': 'Child 3'}, {'name': 'Child 4'}]},
        {'name': 'Parent 3', 'children': [{'name': 'Child 5'}, {'name': 'Child 6'}]},
        {'name': 'Parent 4', 'children': [{'name': 'Child 7'}, {'name': 'Child 8'}]},
    ]

    model = NestedListModel(data)

    # Создаем первый QListView для отображения родительских элементов
    parent_list_view = QListView()
    parent_list_view.setModel(model)
    parent_list_view.setCurrentIndex(model.index(0, 0))

    # Создаем второй QListView для отображения вложенных элементов
    child_list_view = QListView()
    child_list_view.setModel(model)
    child_list_view.setRootIndex(model.index(0, 0))

    # Обновляем второй QListView при выборе родительского элемента в первом QListView
    def updateChildListView(index):
        child_list_view.setRootIndex(index)

    parent_list_view.clicked.connect(updateChildListView)
    # parent_list_view.clicked.connect(child_list_view.setRootIndex)

    layout = QVBoxLayout()
    layout.addWidget(parent_list_view)
    layout.addWidget(child_list_view)

    widget = QWidget()
    widget.setLayout(layout)
    widget.show()

    sys.exit(app.exec())

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