2016-09-28 169 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 

這就是我需要的,但如果有更好的方法,請讓我知道。