GtkTreeIter validieren

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
evilstar
User
Beiträge: 3
Registriert: Sonntag 1. Juni 2008, 09:10

Hallo

ich würd gern wissen, wie man überlicherweise überprüft ob ein Iterator eines TreeModels noch gültig ist. Das GenericTreeModel bietet dazu die Methode iter_is_valid, aber wie geht man bei einem Iter eines TreeModel vor?

Hintergrund dessen ist übrigens, dass ich eine Funktion habe, die in einer Schleife Änderungen an einem TreeModel vornimmt. Da diese Funktion per gobject.idle_add() gestartet wird, kann es aber passieren, dass während der Ausführung das TreeModel neu erstellt wird. In diesem Fall bekomme ich immer die Meldung: "GtkWarning: gtk_tree_store_get_value: assertion `VALID_ITER (iter, tree_store)' failed".
Ich nehme an, wenn ich bei jedem Schleifendurchlauf prüfen würde, ob der Iter noch gültig ist, könnte ich die Meldung vermeiden.
Andererseits: gibt es eine Möglichkeit, eine Funktion die per idle_add() ausgeführt wurde, von "Aussen" wieder abzubrechen? Dann könnte ich nämlich Eventgesteuert den Abbruch erzwingen bevor es zu der Meldung kommt.

Hoffe ich hab das Problem klar ausgedrückt. Danke schon mal...
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Wo benutzt man denn ein `gtk.TreeModel` direkt? Das ist ja nur eine abstrakte Klasse, die das Interface darstellt, und die abgeleiteten Klassen wie `gtk.TreeStore` und `gtk.ListStore` haben alle eine `iter_is_valid`-Methode.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
evilstar
User
Beiträge: 3
Registriert: Sonntag 1. Juni 2008, 09:10

Du hast Recht, muss mich da total verirrt haben. Jedenfalls klappt es jetzt. Danke!

Trotzdem nochmal: gibt es eine Möglichkeit, eine per idle_add() ausgeführte Funktion vorzeitig zu beenden, ohne die Abbruchbedingung in der Funktion zu platzieren?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein, man kann keine Funktionen "von außen" abbrechen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Es gibt da noch die Funktion gobject.source_remove
Ob die aber wirklich die Ausführung der Callback-Funktion aktiv abbricht oder nur verhindert, dass der Callback gestartet wird, musst du selbst herausfinden.
Antworten