Treeview sortiert nach Standardspalte

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
BlackJack

@martinjo: Ich würde mal vermuten dass Du dafür nur bei *einer* Spalte die Sortierung setzen solltest und nicht bei *allen*.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
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‽
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
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.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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.
Zuletzt geändert von martinjo am Montag 31. Oktober 2016, 16:00, insgesamt 1-mal geändert.
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

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
Antworten