Я пытаюсь найти в дереве деревьев GTK 3 строку. Хранилище деревьев имеет 4 столбца и предназначено для виджета в виде дерева, в котором есть вызываемые узлы. я создаю узлы с помощью этой функции:
def AddItem(self,ParentIter,txt,datapath='',projName=Project):
self.store = self.builder.get_object('theTreeStore')
NodeId = secrets.token_hex(8)
if ParentIter == None:
ParentNodeId = ''
else:
ParentNodeId = self.store.get_value(ParentIter, 2)
treeEntry = ['%s' %ParentNodeId,'%s' %txt,'%s' %NodeId,'%s' %datapath]
node = self.store.append(ParentIter, treeEntry) <<<<<<<<<<<<<
self.view = self.builder.get_object('Tree')
self.view.set_model(self.store)
# table nodes(tParentNodeID ,tNodeTxt ,tNodeID ,tDataPath );
sql = "INSERT INTO %s (tParentNodeID ,tNodeTxt ,tNodeID ,tDataPath ) VALUES ('%s','%s','%s','%s')" %(projName,ParentNodeId,txt,NodeId,datapath)
self.cursor.execute(sql)
self.mariadb_connection.commit()
for x in self.cursor:
print(x)
return(node)
Как видите, данные в дереве вложены в его родительский элемент.
теперь мне нужно как-то найти в хранилище деревьев строку, содержащую определенную строку NodeId. Я читал документы GTK снова и снова, но я не могу понять, что делать. я думаю, мне нужно использовать следующие методы:
store.get_iter ()
store.iter_children ()
но все, что я пробую, возвращает только корневые узлы без дочерних элементов.
Мне в основном нужна функция поиска, которая будет рекурсивно искать строку для каждого узла и его дочерних элементов, а также их дочерних элементов. как то так:
def GetRowbyNodeID(nodeid):
for row in treestore:
if row[1]==nodeid:
return(row)
for children in row:
if children[1] == nodeid
return(children)
Код находится в нескольких файлах, я могу публиковать любые функции, если это необходимо.