2016-09-28 170 views
1

我使用tkinter ttk GUI来呈现服务器中的文件数据。这些信息存储在ttk树视图中,并以表格形式呈现。目标是让用户能够过滤这些行,以便在用户完成过滤后,只能在树视图中显示的功能上执行这些功能。tkinter ttk遍历树视图

问题是,我无法找到一种方法来遍历树视图。我需要能够做到这样的事情:

def filterTreeview(treeviewToFilter, tvColumn, stringVariable): 
    for tvRow in treeviewToFilter: 
     if tvRow.getValue(tvColumn) != stringVariable: 
      tvRow.detach() 

我该如何做到这一点?

作为第二个问题,是否有人知道更好的方法来做到这一点?有什么理由使用树视图而不是简单的数组?如何在数据数组上创建过滤器,然后从头开始重新创建treeview表?

我已经花了很多时间阅读教程寻找信息,但我没有成功在理解一个TreeView迄今使用数据的方式:

python ttk treeview sort numbers http://www.tkdocs.com/tutorial/tree.html

https://fossies.org/dox/Python-3.5.2/classtkinter_1_1ttk_1_1Treeview.html

+1

您是否尝试过使用记录的[get_children](https://docs.python.org/dev/library/tkinter.ttk.html#tkinter.ttk.Treeview.get_children)方法? –

+0

我已经调查过它,但我无法做出使用它来遍历树视图的步骤。它返回一个清单,究竟是什么?他们是可以用来解析treeview的treeview ID吗? – user3535074

+1

我指出的文件说它返回“儿童列表”。更具体地说,它返回每个孩子的ID。许多treeview方法都把这个id作为参数。 –

回答

0

要遍历树视图的各个条目,获取treeview项目的id列表并使用它在'for'循环中迭代:

#Column integer to match the column which was clicked in the table 
col=int(treeview.identify_column(event.x).replace('#',''))-1 

#Create list of 'id's 
listOfEntriesInTreeView=treeview.get_children() 

        for each in listOfEntriesInTreeView: 
         print(treeview.item(each)['values'][col]) #e.g. prints data in clicked cell       
         treeview.detach(each) #e.g. detaches entry from treeview 

这就是我需要的,但如果有更好的方法,请让我知道。