[Python-de] pygtk mit TreeView

Volker Helm helm.volker at gmx.de
Mit Apr 27 10:24:55 CEST 2005


Hi,

> Du kannst ja das listStore abhängig von der Abfrage immer wieder neu
> bauen. Das setzt natürlich voraus, daß Du jeweils weißt (oder
> herausfinden kannst), was für Datentypen Du zurückbekommst. Dann teilst
> Du Deiner TreeView mit set_model() mit, welche listStore es jetzt
> darstellen soll.

Das Problem darin liegt, wie kann man das dynamisch machen. Im Tutorial
fand ich eine Anleitung, wenn diese generisch gebaut werden:
http://www.pygtk.org/pygtk2tutorial/sec-GenericTreeModel.html
Leider gab es kein Beispiel, wie man das Datenmodell für ListStore
anders zuweisen kann, sofern es dynamisch generiert werden soll.

>>cur.execute("""select blah, blubb from schauspieler""") die
>>Tabellenköpfe (cur.description) ausgelesen wurde, möchte ich das
>>Datenmodell aufbauen, in dem dann die Daten eingetragen werden.
>>
>>Leider habe ich die Dokumentation (Tutorial) so verstanden, dass bei
>>gtk.ListStore die Datenstruktur fest definiert sein muss.
> 
> Ja, das ist aber gar kein Problem. Datenmodell (ListStore) und
> Darstellung (TreeView) sind unabhängig voneinander.

Das hatte ich auch so verstanden,allerdings basiert doch die Darstellung
  (TreeView) auf dem Modell (ListStore), welches vorher definiert werden
muss. Daraus werden die Reihenfolgen der Spalten gezogen. Alle
Umsortierungen der Spalten müssen der Darstellung ein neues Modell
zuweisen, habe ich das richtig verstanden?

Sollte ich das irgendwann mal kapieren, schreibe ich wohl ein kleines
deutsche Tutorial darüber :-(.

>>Leider habe
>>ich keine Ahnung, wie ich eine, nach der Datenbankabfrage, dynamisch
>>generierte Struktur gtk.ListStore übergeben kann. Tuples, List und
>>Strings hat er bisher abgelehnt.
> 
> Neu aufbauen. Mußt Du ja eh machen, wenn sich die ganzen Daten geändert
> haben.

Das ist auch beabsichtigt. Jede Abfrage auf die Datenbank ergibt
wahrscheinlich ein anderes Datenmodell, sofern sie die Datengrundlage
ändert. Sollte es nicht der Fall sein, bin ich so dreist und würde das
Modell trotzdem neu erstellen.

>>Z.B. für Schauspieler:
>><code>
>>  self.liststore = gtk.ListStore(gobject.TYPE_STRING,
>>                    gobject.TYPE_STRING,gobject.TYPE_INT)
> 
> -- snip
> 
>>Bei Filmtiteln wird das Datenmodell eher aussehen wie
>>gtk.ListStore(str,int,str,int)
>># Titel, Länge, Medium(DVD,Video etc.), Freigabealter
> 
> 
> Du könntest type() benutzen, um die Datentypen festzustellen. Die
> Spaltentitel kriegst Du eventuell noch aus Deiner Abfrage zusammen
> (ggf. Aliase benutzen, damit das lesbar wird).

Gute Idee, aber wie weise ich diese dem Modell (ListStore) zu. Ich habe
bisher keinen Weg gefunden, wie ich dies über eine Schleife machen kann.

Hast Du dafür vielleicht ein Beipiel?

>>PS: Weiß einer ein gutes Tutorial für Glade mit python und pygtk?
> 
> http://primates.ximian.com/~sandino/python-glade/

Spitze, werde ich mir mal ansehen.

Bis dann,

Volker