[Python-de] GTK -> Liststore -> Treeview: klick

Diez B. Roggisch deets at web.de
Mi Mai 28 17:44:00 UTC 2008


> <Hände zum Himmel>Ja, genau das!</>
>> Weil die zeilen aber umsortierbar sind, geht im die Zuordnung 
>> verloren. Um sie wieder herzustellen erzeugt eir eine unsichtbare 
>> spalte, in der er den Index speichert.
>>
>> Statt das so unglaublich umstaenndlich zu machen, schlage ich ihm vor:
>>
>>  - erzeuge eine Listitems aus deinen Datenobjekten.
>>  - speichere eine referenz auf dieses datenobjekt. Oder wenn er 
>> wirklich nur den index braucht, dann eben den.
>>
>> Es gibt einfach absolut keinen Grund Daten die man fuer interne Zwecke 
>> braucht als extra List/Tree/SonstewasView-Spalten anzulegen!
>>   
> Genau, so sehe ich das auch. Ich möchte GUI und Daten immer getrennt haben.
> Dein Vorschlag habe ich vorhin ausprobiert, bin aber noch nicht zu einer 
> Lösung gekommen. Könntest Du Deine Lösung noch etwas detailierter 
> Erklären, eventuell mit Schnipsel?
> Das ist mein erstes GTK, und ich werde mit den TreeItern nicht warm.

Also, ich habe mir das nochmal ein bisschen angeschaut - und leider ist 
das alles nicht so einfach.

So wie ich Qt 3.x programmiert habe geht das naemlich nicht mehr so 
unbedingt. Bzw. schon noch - aber eigentlich macht man das nicht mehr so.

Das Problem: in meinem code gehe ich davon aus, das man explizit eine 
liste zB mit items fuellt. damit hat man selbst ein objekt in der hand, 
mit dem man beliebig "rumsauen" kann.

Leider klappt das bei den "neuen", model-getriebenen ansaetzen nicht 
mehr. Die kennen jetzt "nur" noch Modelle die fuer gegebene Positionen 
Werte vorhalten - und diese Werte aus einer Reihe von unterstuetzten 
Werten stammen duerfen (also klassisch string, int, float usw..)

Die Loesung sieht dann denke ich anders aus - du musst zB von

gtk.GenericTreeModel

http://www.pygtk.org/docs/pygtk/class-pygtkgenerictreemodel.html
http://www.pygtk.org/pygtk2tutorial/sec-GenericTreeModel.html

ableiten. Als Grundlage dient dann eben die Liste deiner eigenen Objekte.


HTH,

Diez