
Hallo Pythonistas, ich habe hier eine GUI mit GTK in dem eine Liste mit Liststore und Treeview gefüllt ist. 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. Meine Frage: Ist das so richtig? Denn ich konnte keine andere Methode finden. Mathias hier Auszüge <pre> # create a liststore with string column to use as the model self.myListstore = gtk.ListStore(int, str, str, 'gboolean') # create the TreeView using liststore self.treeview = gtk.TreeView(self.myListstore) self.treeview.connect("row-activated", self.Call_ListClick) col = { #0:['Nr',0], 1:['Time',1], 2:['Title',2]} for key, val in col.iteritems(): # create the TreeViewColumns to display the data tvcolumn = gtk.TreeViewColumn(val[0]) # add columns to treeview self.treeview.append_column(tvcolumn) # create a CellRenderers to render the data cell = gtk.CellRendererText() # add the cells to the columns tvcolumn.pack_start(cell, True) # content in tvcolumn.set_attributes(cell, text=val[1]) # Allow sorting on the column tvcolumn.set_sort_column_id(key) def Call_ListClick(self, *args): """Function: If a item is klicked.""" cursor = self.treeview.get_cursor() # Get the selection iter selected = self.treeview.get_selection() model, selection_iter = selected.get_selected() val = self.myListstore.get_value(selection_iter, 0) print val </pre>

Am Freitag, den 23.05.2008, 11:38 +0200 schrieb Mathias Uebel:
Warum solltest du den Cursor nicht nehmen können? Der bezieht sich doch AFAIK auf das angeklickte Element, also genau das wo du willst... Du meinst aber eh die Selection, und nicht den Cursor oder? Egal wo es im TreeView angezeigt wird!
Hat es einen Grund warum du "row-activated" als Signal genommen hast, und nicht etwa "cursor-changed"? ------------ SCHNIPPP ------------------ selection = treeview.get_selection() if selection.get_mode() == gtk.SELECTION_SINGLE: model, iter = selection.get_selected() ------------- SCHNAPP ----------- Das würe mal ein CODE-Schnipsel wie du da rankommst... Wäre halt für eine Einfach-Auswahl (also nix mit Strg+2. Zeile oder so). Das TreeView wird als Argument dem Callback mit übergeben, also auch hier kein Problem. mfg Betz Stefan -- Betz Stefan -- Webdesign & Computerservice URL: http://www.stefan-betz.net Mail: info@stefan-betz.net

Normalerweise brauchst Du keine Extraspalte, sofern Du nur die Daten aus dem Liststore brauchst. Über die aktive Zeile kannst du alle Werte ebendieser auslesen. Die Sortierung zieht auch die Daten mit, also kein Problem von der Seite. model, itr = selection.get_selected() wert1,wert2,... = model.get(itr,1,2,...) Sollte helfen, Volker -------- Original-Nachricht --------
-- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Volker Helm schrieb: Hallo Volker,
Normalerweise brauchst Du keine Extraspalte, sofern Du nur die Daten aus dem Liststore brauchst. Über die aktive Zeile kannst du alle Werte ebendieser auslesen. Die Sortierung zieht auch die Daten mit, also kein Problem von der Seite.
Genau darum geht es. Ich brauche einen eindeutigen Index, denn damit muss ich mit dem Klick ein Dict bedienen. Darum bin ich jetzt schon soweit, daß ich denn doch den Key des Dict in einer versteckten Spalte stelle. In dem Zuge die Frage: Es gibt auch noch die Idee, den Teil der Daten, der durch den Klick erst sichtbar werden soll, mit in die Liste als versteckte Spalte zustellen. Wie sieht das dann mit der Performance aus? Belasten die Daten, die zwar in das gtk.Object kommen aber nicht angezeigt werden? Wie macht der Profi das? Danke für das Bemühen Mathias
[...]

Hi Mathias,
1. Ich bin kein Profi. 2. Klar geht das, hängt von der Menge der Daten ab, die Du anzeigen lassen willst. Alle Spalten können individuell ein und ausgeblendet werden. Würde ich an Deiner Stelle mal durchtesten. column.set_visible(True) für die entsprechende Zeile. Sollte es ein einzelner Wert sein, der angezeigt werden soll. Pack ihn doch einfach in einen Tooltip, ab 2.12 sollte das kein Problem darstellen. Hoffe, ich konnte helfen, Volker -- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Hi Diez,
PyQt ist von mir noch zu entdecken, aber interessant. In GTK kannst Du, wie gesagt, einfach einen Wert ausblenden und ihn bei Bedarf auslesen, wenn Du diesen brauchst, um Daten außerhalb des Liststore/Treeviews anzusprechen. Sollte in PyQt ähnlich funktionieren. Bis dann, Volker -- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

Das *will* man doch ueberhaupt nicht! Es ist doch resourcenverschwendung und aufwand, wenn alles was man will - und so verstehe ich matthias - sowas hier ist (pseudo-gui-code listview = ListView() for my_object in list_of_my_objects: item = ListViewItem(listview, my_object.property_for_column_one, my_object.property_for_column_two) # hier kommt der "trick" # item.a_name_i_can_freely_choose = my_object Damit habe ich dann wenn ich in einem Eventhandler den Click auf ein ListViewItem abhandele durch Zugriff auf a_name_i_can_freely_choose das ursprungsobject. Das in einer extra spalte zu verstecken ist muehsamer, bescraenkt auf die typen die spalten darstellen koennen und schlicht unnoetig. Und solange PyGTK nicht irgendwie das instanz-__dict__ abklemmt, sollte das auch genauso funktionieren. Diez

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? 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. Bis dann, Volker PS: Muss mich wirklich mal in PyQt einarbeiten ;) -------- Original-Nachricht --------
-- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

On Tuesday 27 May 2008 17:19:27 Volker Helm wrote:
Das verstehe ich nicht.
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. """ 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. 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! Diez

Diez B. Roggisch schrieb: Hallo Diez, Hallo Volker, es mag daran liegen, dass ich Autodidakt bin: Oft weiß ich nicht, wie ich eine Scriptproblem darlegen muss.
<Hände zum Himmel>Ja, genau das!</>
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. Danke, Mathias

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

Hi Mathias,
Wenn Du die Doku komplett verstanden hast, können wir uns gerne unterhalten ;) dann kann ich noch was lernen. Bzgl. deinem Problem, gib einfach mal genau an, was du willst. Beispiele sind immer gut. Volker -- Super-Aktion nur in der GMX Spieleflat: 10 Tage für 1 Euro. Über 180 Spiele downloaden: http://flat.games.gmx.de

Diez B. Roggisch schrieb: Hallo Diez, Hallo Volker,
Die Lösung habe ich aus einem Forum. Dort habe ich das Thema auch diskutiert. Ein GTk-Profi hat mir geholfen: Es muss wirklich ein anders TreeModel mit ins Boot. Vielen Dank für eure Hilfe Mathias Aber seht selbst: #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, time import pygtk pygtk.require('2.0') import gtk, gobject print """1. Klick auf 'berta'. 2. Sortiere nach Nummer, bis sich die Reihenfolge der Liste veraendert. 3. Klick wieder auf berta. """ class MainWin: def __init__(self): self.myWindow = gtk.Window(gtk.WINDOW_TOPLEVEL) self.myListstore = gtk.ListStore(str, str) # hier wird das TreeModelSort initialisiert !!!!! self.treeview = gtk.TreeView(gtk.TreeModelSort(self.myListstore)) self.treeview.connect("row-activated", self.Call_ListClick) col = { 0:['Time',0], 1:['Title',1]} for key, val in col.iteritems(): tvcolumn = gtk.TreeViewColumn(val[0]) self.treeview.append_column(tvcolumn) cell = gtk.CellRendererText() tvcolumn.pack_start(cell, True) tvcolumn.set_attributes(cell, text=val[1]) tvcolumn.set_sort_column_id(key) self.data = [['a','anton'], ['b','berta'], ['c','conrad'], ['d','dora'], ['e','emil']] for i in self.data: item = self.myListstore.append(i) self.myWindow.add(self.treeview) self.myWindow.show_all() def Call_ListClick(self, *args): selection = self.treeview.get_selection() if selection.get_mode() == gtk.SELECTION_SINGLE: model, iter = selection.get_selected() print "der index beim ersten mal: %s" % model.get_model().get_path(model.convert_iter_to_child_iter(None, iter)) print "der index nach dem sortieren: %s" % model.get_path(iter) return 0 if __name__ == "__main__": # make a window with list Win = MainWin() gtk.main()

Ah, wow, jetzt weiß ich, warum ich mich nicht als Profi bezeichne. Bis dann, Volker -- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Hi Diez,
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.
Das kann sein.
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.
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

Am Freitag, den 23.05.2008, 11:38 +0200 schrieb Mathias Uebel:
Warum solltest du den Cursor nicht nehmen können? Der bezieht sich doch AFAIK auf das angeklickte Element, also genau das wo du willst... Du meinst aber eh die Selection, und nicht den Cursor oder? Egal wo es im TreeView angezeigt wird!
Hat es einen Grund warum du "row-activated" als Signal genommen hast, und nicht etwa "cursor-changed"? ------------ SCHNIPPP ------------------ selection = treeview.get_selection() if selection.get_mode() == gtk.SELECTION_SINGLE: model, iter = selection.get_selected() ------------- SCHNAPP ----------- Das würe mal ein CODE-Schnipsel wie du da rankommst... Wäre halt für eine Einfach-Auswahl (also nix mit Strg+2. Zeile oder so). Das TreeView wird als Argument dem Callback mit übergeben, also auch hier kein Problem. mfg Betz Stefan -- Betz Stefan -- Webdesign & Computerservice URL: http://www.stefan-betz.net Mail: info@stefan-betz.net

Normalerweise brauchst Du keine Extraspalte, sofern Du nur die Daten aus dem Liststore brauchst. Über die aktive Zeile kannst du alle Werte ebendieser auslesen. Die Sortierung zieht auch die Daten mit, also kein Problem von der Seite. model, itr = selection.get_selected() wert1,wert2,... = model.get(itr,1,2,...) Sollte helfen, Volker -------- Original-Nachricht --------
-- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Volker Helm schrieb: Hallo Volker,
Normalerweise brauchst Du keine Extraspalte, sofern Du nur die Daten aus dem Liststore brauchst. Über die aktive Zeile kannst du alle Werte ebendieser auslesen. Die Sortierung zieht auch die Daten mit, also kein Problem von der Seite.
Genau darum geht es. Ich brauche einen eindeutigen Index, denn damit muss ich mit dem Klick ein Dict bedienen. Darum bin ich jetzt schon soweit, daß ich denn doch den Key des Dict in einer versteckten Spalte stelle. In dem Zuge die Frage: Es gibt auch noch die Idee, den Teil der Daten, der durch den Klick erst sichtbar werden soll, mit in die Liste als versteckte Spalte zustellen. Wie sieht das dann mit der Performance aus? Belasten die Daten, die zwar in das gtk.Object kommen aber nicht angezeigt werden? Wie macht der Profi das? Danke für das Bemühen Mathias
[...]

Hi Mathias,
1. Ich bin kein Profi. 2. Klar geht das, hängt von der Menge der Daten ab, die Du anzeigen lassen willst. Alle Spalten können individuell ein und ausgeblendet werden. Würde ich an Deiner Stelle mal durchtesten. column.set_visible(True) für die entsprechende Zeile. Sollte es ein einzelner Wert sein, der angezeigt werden soll. Pack ihn doch einfach in einen Tooltip, ab 2.12 sollte das kein Problem darstellen. Hoffe, ich konnte helfen, Volker -- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Hi Diez,
PyQt ist von mir noch zu entdecken, aber interessant. In GTK kannst Du, wie gesagt, einfach einen Wert ausblenden und ihn bei Bedarf auslesen, wenn Du diesen brauchst, um Daten außerhalb des Liststore/Treeviews anzusprechen. Sollte in PyQt ähnlich funktionieren. Bis dann, Volker -- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

Das *will* man doch ueberhaupt nicht! Es ist doch resourcenverschwendung und aufwand, wenn alles was man will - und so verstehe ich matthias - sowas hier ist (pseudo-gui-code listview = ListView() for my_object in list_of_my_objects: item = ListViewItem(listview, my_object.property_for_column_one, my_object.property_for_column_two) # hier kommt der "trick" # item.a_name_i_can_freely_choose = my_object Damit habe ich dann wenn ich in einem Eventhandler den Click auf ein ListViewItem abhandele durch Zugriff auf a_name_i_can_freely_choose das ursprungsobject. Das in einer extra spalte zu verstecken ist muehsamer, bescraenkt auf die typen die spalten darstellen koennen und schlicht unnoetig. Und solange PyGTK nicht irgendwie das instanz-__dict__ abklemmt, sollte das auch genauso funktionieren. Diez

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? 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. Bis dann, Volker PS: Muss mich wirklich mal in PyQt einarbeiten ;) -------- Original-Nachricht --------
-- Psssst! Schon vom neuen GMX MultiMessenger gehört? Der kann`s mit allen: http://www.gmx.net/de/go/multimessenger

On Tuesday 27 May 2008 17:19:27 Volker Helm wrote:
Das verstehe ich nicht.
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. """ 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. 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! Diez

Diez B. Roggisch schrieb: Hallo Diez, Hallo Volker, es mag daran liegen, dass ich Autodidakt bin: Oft weiß ich nicht, wie ich eine Scriptproblem darlegen muss.
<Hände zum Himmel>Ja, genau das!</>
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. Danke, Mathias

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

Hi Mathias,
Wenn Du die Doku komplett verstanden hast, können wir uns gerne unterhalten ;) dann kann ich noch was lernen. Bzgl. deinem Problem, gib einfach mal genau an, was du willst. Beispiele sind immer gut. Volker -- Super-Aktion nur in der GMX Spieleflat: 10 Tage für 1 Euro. Über 180 Spiele downloaden: http://flat.games.gmx.de

Diez B. Roggisch schrieb: Hallo Diez, Hallo Volker,
Die Lösung habe ich aus einem Forum. Dort habe ich das Thema auch diskutiert. Ein GTk-Profi hat mir geholfen: Es muss wirklich ein anders TreeModel mit ins Boot. Vielen Dank für eure Hilfe Mathias Aber seht selbst: #!/usr/bin/env python # -*- coding: utf-8 -*- import sys, time import pygtk pygtk.require('2.0') import gtk, gobject print """1. Klick auf 'berta'. 2. Sortiere nach Nummer, bis sich die Reihenfolge der Liste veraendert. 3. Klick wieder auf berta. """ class MainWin: def __init__(self): self.myWindow = gtk.Window(gtk.WINDOW_TOPLEVEL) self.myListstore = gtk.ListStore(str, str) # hier wird das TreeModelSort initialisiert !!!!! self.treeview = gtk.TreeView(gtk.TreeModelSort(self.myListstore)) self.treeview.connect("row-activated", self.Call_ListClick) col = { 0:['Time',0], 1:['Title',1]} for key, val in col.iteritems(): tvcolumn = gtk.TreeViewColumn(val[0]) self.treeview.append_column(tvcolumn) cell = gtk.CellRendererText() tvcolumn.pack_start(cell, True) tvcolumn.set_attributes(cell, text=val[1]) tvcolumn.set_sort_column_id(key) self.data = [['a','anton'], ['b','berta'], ['c','conrad'], ['d','dora'], ['e','emil']] for i in self.data: item = self.myListstore.append(i) self.myWindow.add(self.treeview) self.myWindow.show_all() def Call_ListClick(self, *args): selection = self.treeview.get_selection() if selection.get_mode() == gtk.SELECTION_SINGLE: model, iter = selection.get_selected() print "der index beim ersten mal: %s" % model.get_model().get_path(model.convert_iter_to_child_iter(None, iter)) print "der index nach dem sortieren: %s" % model.get_path(iter) return 0 if __name__ == "__main__": # make a window with list Win = MainWin() gtk.main()

Ah, wow, jetzt weiß ich, warum ich mich nicht als Profi bezeichne. Bis dann, Volker -- GMX startet ShortView.de. Hier findest Du Leute mit Deinen Interessen! Jetzt dabei sein: http://www.shortview.de/?mc=sv_ext_mf@gmx

Hi Diez,
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.
Das kann sein.
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.
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
participants (4)
-
Diez B. Roggisch
-
Mathias Uebel
-
Stefan Betz
-
Volker Helm