Python GTK3 搜索TreeStore节点后如何通过代码选中TreeView对应节点
Gtk.TreeStore搜索节点后选中的实现问题
我写了一个类函数用于遍历Gtk.TreeStore搜索子节点,找到匹配节点后需要将选中状态切换到该节点。目前我的搜索函数返回的是迭代器,我怀疑这是问题的根源,但不确定应该返回什么类型,因为Gtk.TreeSelection的所有相关方法似乎都要求传入Gtk.TreePath类型的参数。
请问有没有在TreeStore中查找节点后选中该节点的标准实现方案?这应该是很常见的使用场景,但我没有找到对应的说明。
我当前的搜索代码如下:
def findNodeByDescription( self, desc ): root_iterator = self.tree_store.get_iter_first() return self.findNodeByDescriptionRecursive( root_iterator, desc ) def findNodeByDescriptionRecursive( self, tree_iter, desc ): """ Recursive function to search the tree """ result = None tree_model = self.tree_view.get_model() while ( result == None and tree_iter != None ): # is it this node? if ( tree_model.get_value(tree_iter, 0).description == desc ): # found it result = tree_iter break elif ( self.tree_store.iter_has_child( tree_iter ) ): child_iter = self.tree_store.iter_children( tree_iter ) result = self.findNodeByDescriptionWorker( child_iter, desc ) tree_iter = self.tree_store.iter_next( tree_iter ) return result
注:我使用的是自定义树节点。
问题更新
- 编辑1:我从Python GTK FAQ中找到了
get_path()方法作为部分解决方案。 - 编辑2:使用
expand_to_path()可以展开树节点,我之前的问题是只展开了子节点没有展开父节点,所以节点虽然被展开但依然不可见(我的树结构有3层分支,需要查找的是中间层分支)。
最终调整后的选中代码如下:
def findAndSelectNode( self, text ): tree_iter = self.findNodeByDescription( text ) if ( tree_iter != None ): print("###### SELECTING ROW" ) # THIS EXECUTES, BUT NOTHING HAPPENS?! path = self.tree_store.get_path( tree_iter ) #self.tree_view.expand_row( path, True ) -- doesn't work self.tree_view.expand_to_path( path ) self.tree_view.set_cursor( path )
内容的提问来源于stack exchange,提问作者Kingsley
相关产品推荐
相关产品推荐

