Как удалить дочерние элементы родителя в древовидной структуре PyQt5 - PullRequest
0 голосов
/ 03 апреля 2020

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

enter image description here

Когда я дважды щелкаю на типе данных, появляется диалоговое окно

enter image description here

, и если пользователь меняет тип данных со Списка на другой, я бы хотел удалите список из дерева.

enter image description here

Как можно ближе удаляет родителей и детей с этим

 self.model.removeRow(index.row(),index.parent())

Я подумал, что, может быть, я мог бы повторить что-то вроде этого

self.model.removeRow(index.row(),index.child(i) 

Но у меня возникли проблемы с количеством детей, которое нужно будет повторить. Кто-нибудь делал что-то подобное раньше?

1 Ответ

0 голосов
/ 03 апреля 2020

Если вы хотите удалить всех потомков родителя, вы можете использовать removeRows(row, count, parent=None).

Поскольку, как и index(), и другие функции, вы можете использовать родительский аргумент , вы можете получить количество дочерних элементов, используя rowCount(parent=None).

В любом случае, если родительский аргумент не указан, вместо него рассматривается аргумент QtCore.QModelIndex(): «пробел» «экземпляр QModelIndex считается недействительным, и он также считается таким же, как индекс root модели как таковой.

Но . Если указан действительный родитель, он будет использоваться в качестве ссылки для параметров строки и столбца.

def removeChildren(self, index):
    self.model.removeRows(

        # remove as many rows as the row count of the *parent*, 
        # starting from row 0
        0, self.model.rowCount(<b>index.parent()</b>),

        # remove rows for the specified parent
        <b>index.parent()</b>

        )

Я предлагаю вам внимательно прочитать и изучить не только документацию о класс, который вы используете, но также и все классы, от которых он наследуется (в данном случае, QAbstractItemModel ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...