2016-09-28 9 views
1

私はtkinter ttk GUIを使用してサーバー内のファイルにデータを表示します。情報はttkツリービューに格納され、テーブルとして表示されます。目的は、ユーザーがフィルタリングを完了した後でツリービューに表示されているものに対してのみ機能を実行できるように、ユーザーがこれらの行をフィルタリングできるようにすることです。tkinter ttk iterating through treeview

問題は、私はツリービューを反復処理する方法を見つけることができません。私はこのような何かをすることができるようにする必要があります:

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

どうすればいいですか?

2番目の質問として、誰かがこれを行うより良い方法を知っていますか?単純な配列ではなくツリービューを使用する理由はありますか?データの配列に対してフィルタを作成し、最初からツリービューテーブルを再作成するのはどうでしょうか?

私が情報を探してチュートリアルを読んで多くの時間を費やしてきたが、私はこれまでツリービュー内のデータを使用する方法を理解することに成功していませんでした:

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

ツリービューの個々のエントリを繰り返し処理するには、ツリービューアイテムの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 

これは私の必要なことですが、より良い方法がある場合は、私に知らせてください。

関連する問題