Seite 1 von 1

Treeview sortiert nach Standardspalte

Verfasst: Dienstag 19. April 2016, 12:50
von martinjo
Hallo

Wie kann ich denn beim anlegen eines Treeviews mit TreeModelSort eine Spalte als Standardsortierung auswählen?

Sortieren nach Spalten mit Modelfilter Funktion

Code: Alles auswählen

my_liststore = gtk.ListStore(str, str, str)
my_modelfilter = my_liststore.filter_new()
self.my_treeview = gtk.TreeView(gtk.TreeModelSort(self.my_modelfilter))
for number, name in enumerate(header):
    cell = gtk.CellRendererText()
    column = gtk.TreeViewColumn(name, cell, text=number)
    column.set_sort_column_id(number)
http://www.pygtk.org/pygtk2reference/cl ... olumn.html
http://www.pygtk.org/pygtk2tutorial/sec ... lumns.html

gtk TreeModelSort default column

Danke

Re: Treeview sortiert nach Standardspalte

Verfasst: Dienstag 19. April 2016, 13:14
von BlackJack
@martinjo: Ich würde mal vermuten dass Du dafür nur bei *einer* Spalte die Sortierung setzen solltest und nicht bei *allen*.

Re: Treeview sortiert nach Standardspalte

Verfasst: Dienstag 19. April 2016, 13:19
von martinjo
Hallo und Danke für die Antwort. Ich habe schon viel probiert. Wenn ich set_sort_column_id bei einer Spalte nicht setze, dann ist die Spalten später nicht sortierbar. Dies sollen sie aber sein. Ich möchte jedoch angeben, dass z.B. Spalte 1 die Spalte ist, die beim starten des Programms vorausgewählt ist.
:K

Re: Treeview sortiert nach Standardspalte

Verfasst: Dienstag 19. April 2016, 13:57
von BlackJack
@martinjo: Hm, dann möchtest Du vielleicht auf dem Model die `set_default_sort_func()` verwenden, womit man die Sortierfunktion angibt wenn *keine* Sortierung einer Spalte ausgewählt wurde‽

Re: Treeview sortiert nach Standardspalte

Verfasst: Mittwoch 20. April 2016, 10:09
von martinjo
BlackJack hat geschrieben:@martinjo: Hm, dann möchtest Du vielleicht auf dem Model die `set_default_sort_func()` verwenden, womit man die Sortierfunktion angibt wenn *keine* Sortierung einer Spalte ausgewählt wurde‽
Da fängt es für mich an wieder sehr kompliziert zu werden. Ich habe bisher ja gar keine Sortierfunktion bzw. das Modell des Treeviews hat und nutzt die default_sort_func() wie ich eben herausgefunden habe.

Wie wird den überhaupt eine oder keine Sortierung einer Spalte gewählt?

Habe jetzt nochmal 45 Minuten gespielt und getestet. Aber noch kein Licht in Sicht :K

Re: Treeview sortiert nach Standardspalte

Verfasst: Mittwoch 20. April 2016, 11:10
von BlackJack
@martinjo: Wenn keine Default-Sortierfunktion gesetzt wird, dann entspricht die Reihenfolge einfach der Reihenfolge der Daten im Model.

Eine Sortierung einer Spalte erreicht man indem man die Spalte mit `set_sort_column_id()` auf dem Model festlegt, wobei die Spalte -1 keine Spalte auswählt und damit entweder die gesetzte Default-Sortierfunktion oder eben keine Sortierung durchgeführt wird. Die Sortierfunktion für eine Spalte setzt man mit `set_sort_func()` auf dem Model. Was passiert wenn man eine Spalte auswählt zu der man keine Sortierfunktion gesetzt hat — keine Ahnung. Müsste ich selbst erst ausprobieren.

Re: Treeview sortiert nach Standardspalte

Verfasst: Montag 31. Oktober 2016, 15:53
von martinjo
Hallo


Heute habe ich mich mal wieder ran gewagt.
@martinjo: Wenn keine Default-Sortierfunktion gesetzt wird, dann entspricht die Reihenfolge einfach der Reihenfolge der Daten im Model.
Wenn ich das Programm starte oder wenn ich auf den Spaltentitel drücke? Ich denke es ist für letzteres und damit nicht was ich haben will.

"set_sort_column_id" benötige ich, damit ich die Zeilen sortieren kann, da darf ich also nichts ändern.

"set_sort_func" benötige ich auch nicht, da jede Zeile schon eine Sortierfunktion besitzt.


Was ich suche ist etwas anderes, es soll eine Spalte ausgewählt sein. Als würde ich das Programm starten und dann auf Spalte 2 klicken, damit man auch sieht, dass diese ausgewählt ist. Und dafür hilft es mir leider auch nicht, wenn ich das Model vorab sortiere.

Re: Treeview sortiert nach Standardspalte

Verfasst: Montag 31. Oktober 2016, 15:57
von martinjo
Mit besseren Suchbegriffen konnte ich jetzt eine Lösung finden:

Code: Alles auswählen

sorted_model = Gtk.TreeModelSort(model=liststore)
sorted_model.set_sort_column_id(1, Gtk.SortType.ASCENDING)
treeview = Gtk.TreeView(model=sorted_model)
Quelle: http://stackoverflow.com/questions/1895 ... mmatically