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

Volker Helm Helm.volker at gmx.de
Do Mai 29 16:30:46 UTC 2008


Hi Diez,

> On Tuesday 27 May 2008 17:19:27 Volker Helm wrote:
> > Hast Du mal ausprobiert, ob PyQt auch ein Dict in einer View zulässt?
> > Dein Beispiel sieht nicht danach aus, sondern eher wie eine Liste. Wie
> > sieht es aus, wenn die Liste 2 dimensional ist, Du weist nur 1 Wert zu?
> 
> Das verstehe ich nicht.

Relativ einfach: eindimensional liste [1,2,3,4,5,...]
                       zweidimensional Liste [[1,2,3,...],[2,3,4,..],...]
Du brauchst für Dein Beispiel werte aus eine Liste, geht aber normalerweise nicht mit einem Dictionary, was Mathias beschrieb, dass er verwendete.

> > Unter PyGTK habe ich es noch nicht probiert, gehe aber lt. Doku davon
> aus,
> > dass es eine Liste sein muss.
> >
> > Unter PyGTK wird i.d.R. eine Methode geschriebe, die diese Event
> bearbeitet
> > (das Anklicken) und dann ausführt, was gemacht werden soll. Eine Liste
> kann
> > meines Wissens auch komplett aus dem Model einfach entnommen werden.
> > Mathias sucht aber nach einer bestimmten Spalte.
> 
> Du hast es denke ich nicht wirklich begriffen. Mathias schrieb:
> 
> """
> Wenn nun eine Eintrag der Liste angeklickt wurde, brauche ich ein Index. 
> Da sich die Spalten sortieren lassen, kann ich die Cursor-Position nicht 
> nehmen. Hierzu habe ich eine durchnummerierte Spalte anlegt, die nicht 
> angezeigt wird.
> """

Das kann sein.

> Mit anderen Worten: durch ein Event bekommt er einen index auf welche
> Zeile 
> der User gecklickt hat. 

> Aus diesem Index moechte er nun auf sein urspruengliches Objekt
> schliessen, 
> das die Zeile mit Daten befuellt hat.
> 
> 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. 

Das ist auch kein Problem, wenn er eine Liste einlesen will.


import gtk
import pygtk
model = gtk.ListStore(int,str,str)
for i,zeile in enumerate(liste):
    model.append(i,liste[0],liste[1])

##einfacher bei einer Liste mit Index
    model.append(*liste)

dann muss man sich nur um die Darstellung kümmern.


> 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.

Wenn er die Daten eh aus einer Datenbank liest, sollte er einfach den eindeutigen Index mitgeben, darüber sind die Daten sofort und einfach zu ändern. Bei Oracle kann über eine Rowid auch gleich ein Zähler definiert werden.
 
> Es gibt einfach absolut keinen Grund Daten die man fuer interne Zwecke
> braucht als extra List/Tree/SonstewasView-Spalten anzulegen!

Nein, aber ich brauche eine Verbindung zu den externen Daten. Zeilen können sich ändern, auch in den Datenbanken.

Bis dann.

Volker

-- 
Ist Ihr Browser Vista-kompatibel? Jetzt die neuesten 
Browser-Versionen downloaden: http://www.gmx.net/de/go/browser