Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用子节点迭代GTK3树存储库_Python_Gtk3 - Fatal编程技术网

在python中使用子节点迭代GTK3树存储库

在python中使用子节点迭代GTK3树存储库,python,gtk3,Python,Gtk3,我正试图在GTK 3树洞中搜索字符串。treestore有4列,用于具有callapsible节点的treeview小部件。我正在使用此功能创建节点: def AddItem(self,ParentIter,txt,datapath='',projName=Project): self.store = self.builder.get_object('theTreeStore') NodeId = secrets.token_hex(8) if Pa

我正试图在GTK 3树洞中搜索字符串。treestore有4列,用于具有callapsible节点的treeview小部件。我正在使用此功能创建节点:

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)

代码在多个文件中,如果需要,我可以发布任何相关函数

GtkTreeStore
实现
GtkTreeModel
接口。因此,您可以使用以下方法:

  • 获取迭代器
  • 获取子元素的迭代器(请注意,这是iter的方法!)

我也推荐阅读。“模型”部分包含了在模型上迭代所需的所有内容(扰流板:搜索
print\u tree\u store

一切正常。再次感谢。我发布了相关代码,以防其他人使用

def SearchTreeRows(self,store, treeiter, searchstr):
    print("\nsearch>%s"%searchstr)
    while treeiter != None:

        if store[treeiter][2] ==searchstr:
            print("found in:%s"%str(store[treeiter][:]))
            return(treeiter)
            break
        print("searched:%s"%str(store[treeiter][:]))    
        if store.iter_has_child(treeiter):
            childiter = store.iter_children(treeiter)
            ret = self.SearchTreeRows(store, childiter, searchstr)
            if ret is not None:
                return ret

        treeiter = store.iter_next(treeiter)

def NodeId2Tree(self,nodeid):
    self.store = self.builder.get_object('theTreeStore')
    rootiter = self.store.get_iter_first()
    row = self.SearchTreeRows(self.store, rootiter,nodeid)
    return(row)

def LoadProject(self):

    global Project
    global ProjSel
    sql = "SHOW TABLES"
    self.cursor.execute(sql)

    tbls = []
    for x in self.cursor:
        tbls.append(x)   

    diag = self.builder.get_object('ProjectChooser')


    self.combo = Gtk.ComboBox()
    ls =Gtk.ListStore(str)
    for tble in tbls:
        strg ="%s" %tble
        ls.append(tble)

    self.combo.set_model(ls)
    cellr = Gtk.CellRendererText()
    self.combo.pack_start(cellr,True) 
    self.combo.add_attribute(cellr, 'text', 0) 
    diag.vbox.pack_start(self.combo, True, True, 5)
    diag.show_all()
    response = diag.run()
    self.combo.destroy()
    print(ProjSel) 
    Project = ProjSel
    ProjSel = ''
    view = self.builder.get_object('Tree')
    self.store.clear()
    view.set_model(self.store)

    sql = "SELECT tParentNodeId,tNodeTxt,tNodeId FROM %s"%(Project)
    self.cursor.execute(sql)



    for x in self.cursor:
        parid = x[0]
        nodtxt = x[1]
        nodid =x[2]
        if parid == '':
            treeEntry = ['%s' %parid,  '%s' %nodtxt,  '%s' %nodid,  '']
            node = self.store.append(None, treeEntry)                #root nodes
        else:
            treeEntry = ['%s' %parid,  '%s' %nodtxt,  '%s' %nodid,  '']
            n2id = self.NodeId2Tree(parid)
            node = self.store.append(n2id, treeEntry)
            print("got return:%s   For:%s"%(n2id,treeEntry[0]))



    view.set_model(self.store)
    #select * where parentid == none  >> get root nodes ???? or parse line by line

谢谢,这篇教程正是我想要的。
def SearchTreeRows(self,store, treeiter, searchstr):
    print("\nsearch>%s"%searchstr)
    while treeiter != None:

        if store[treeiter][2] ==searchstr:
            print("found in:%s"%str(store[treeiter][:]))
            return(treeiter)
            break
        print("searched:%s"%str(store[treeiter][:]))    
        if store.iter_has_child(treeiter):
            childiter = store.iter_children(treeiter)
            ret = self.SearchTreeRows(store, childiter, searchstr)
            if ret is not None:
                return ret

        treeiter = store.iter_next(treeiter)

def NodeId2Tree(self,nodeid):
    self.store = self.builder.get_object('theTreeStore')
    rootiter = self.store.get_iter_first()
    row = self.SearchTreeRows(self.store, rootiter,nodeid)
    return(row)

def LoadProject(self):

    global Project
    global ProjSel
    sql = "SHOW TABLES"
    self.cursor.execute(sql)

    tbls = []
    for x in self.cursor:
        tbls.append(x)   

    diag = self.builder.get_object('ProjectChooser')


    self.combo = Gtk.ComboBox()
    ls =Gtk.ListStore(str)
    for tble in tbls:
        strg ="%s" %tble
        ls.append(tble)

    self.combo.set_model(ls)
    cellr = Gtk.CellRendererText()
    self.combo.pack_start(cellr,True) 
    self.combo.add_attribute(cellr, 'text', 0) 
    diag.vbox.pack_start(self.combo, True, True, 5)
    diag.show_all()
    response = diag.run()
    self.combo.destroy()
    print(ProjSel) 
    Project = ProjSel
    ProjSel = ''
    view = self.builder.get_object('Tree')
    self.store.clear()
    view.set_model(self.store)

    sql = "SELECT tParentNodeId,tNodeTxt,tNodeId FROM %s"%(Project)
    self.cursor.execute(sql)



    for x in self.cursor:
        parid = x[0]
        nodtxt = x[1]
        nodid =x[2]
        if parid == '':
            treeEntry = ['%s' %parid,  '%s' %nodtxt,  '%s' %nodid,  '']
            node = self.store.append(None, treeEntry)                #root nodes
        else:
            treeEntry = ['%s' %parid,  '%s' %nodtxt,  '%s' %nodid,  '']
            n2id = self.NodeId2Tree(parid)
            node = self.store.append(n2id, treeEntry)
            print("got return:%s   For:%s"%(n2id,treeEntry[0]))



    view.set_model(self.store)
    #select * where parentid == none  >> get root nodes ???? or parse line by line