2016-09-28 7 views
1

Ich benutze eine tkinter ttk GUI, um Daten über Dateien in einem Server zu präsentieren. Die Informationen werden in einer ttk-Baumansicht gespeichert und als Tabelle dargestellt. Das Ziel besteht darin, dass der Benutzer in der Lage ist, diese Zeilen zu filtern, so dass Funktionen nur für diejenigen ausgeführt werden können, die in der Baumansicht sichtbar sind, nachdem der Benutzer das Filtern durchgeführt hat.tkinter ttk iterating durch treeview

Problem ist, kann ich einen Weg nicht finden, durch die Treeview zu iterieren. Ich muss etwas tun können:

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

Wie kann ich das erreichen?

Als eine sekundäre Frage, weiß jemand eine bessere Möglichkeit, dies zu tun? Gibt es einen Grund, eine Treeview statt eines einfachen Arrays zu verwenden? Wie wäre es, den Filter für ein Datenfeld zu erstellen und dann die Baumansichtstabelle von Grund auf neu zu erstellen?

ich viel Zeit Tutorials Lesen für Informationen verbracht habe gesucht, aber ich habe die Art und Weise zu verstehen, zu verwenden, um Daten in einem treeview bisher nicht erfolgreich gewesen:

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

Haben Sie versucht, die dokumentierte Methode [get_children] (https://docs.python.org/dev/library/tkinter.ttk.html#tkinter.ttk.Treeview.get_children) zu verwenden? –

+0

Ich habe es vorher untersucht, aber ich war nicht in der Lage, den Schritt zu machen, es zu benutzen, um über die Treeview zu iterieren. Gibt es eine Liste von was genau? Sind das Treeview-IDs, mit denen ich die Baumansicht analysieren könnte? – user3535074

+1

Die Dokumentation, auf die ich Sie hingewiesen habe, sagt, dass sie "eine Liste von Kindern" zurückgibt. Genauer gesagt, gibt es die ID jedes Kindes zurück. Viele der Treeview-Methoden verwenden diese ID als Argument. –

Antwort

0

um durch eine treeview der einzelnen Einträge iterieren, eine Liste von treeview Artikel erhalten ‚ids und dass in einem iterieren verwenden‚für‘Schleife:

#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 

Das tut, was ich brauche, aber wenn es einen besseren Weg gibt, lass es mich wissen.

Verwandte Themen