gtk.ListStore mit Liste füllen

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Guten Abend,

ich habe versuche gerade einen gtk.ListStore mit einer Liste zu füllen. Dieser soll für eine gtk.ListStore verwendet werden. Die Werte die ich dort einsetzen will, sind in einer Liste gespeicherte Strings. Nun bekomme ich es jedoch nicht hin, die Liste direkt in den ListStore zu übertragen. Bisher habe ich auch erst wenig (1x) mit dem ListStore gearbeitet.

Das Problem für mich ist, dass der ListStore anscheinend für alle werde der reihe nach die Typen benötigt, habe ich also 3 Strings in der Liste ein gtk.ListStore(str, str, str). Die Liste ist jedoch nicht immer gleich, weswegen ich den ListStore aus der Liste erstellen lassen wollte.

Was ich beispielsweise versucht habe
  • liste = [apfel, birne, pfirsich]
    liststore = gtk.ListStore([type(c) for c in catlist])
aber natürlich völliger Quatsch, die anderen Versuche sahen auch nicht besser aus^^

Freue mich über Ratschläge! :D
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Ich habe den Fehler glaube ich nun erkannt. Was ich versucht habe war alle Elemente quasi in eine Zeile zu schreiben, jedoch möchte ich pro Zeile nur ein Element welches ich dann auswählen kann. Es reicht also in diesem Fall ein mal str als Parameter.

Schön zu sehen an diesem Beispiel:
https://developer.gnome.org/gnome-devel ... py.html.en

Für das was ich versucht habe würde mich jedoch auch ein Lösungsweg interessieren, das ist jedoch nicht dringend xD

MfG

martinjo
Benutzeravatar
diesch
User
Beiträge: 80
Registriert: Dienstag 14. April 2009, 13:36
Wohnort: Brandenburg a.d. Havel
Kontaktdaten:

Dem Konstruktor von gtk.ListStore übergibst du als Parameter, welche Spalten deine Liste haben soll. Die einzelnen Zeilen hängst du dann mit gtk.ListStore.append(zeile) an, wobei zeile eine Liste/Tupel mit so vielen Elementen ist, wie dein ListStore Spalten hat:

Code: Alles auswählen

lstore = Gtk.ListStore(str)
for i in liste:
    lstore.append([i])
http://www.florian-diesch.de
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

In Ordnung, wenn ich nun aber eine Liste bestehend aus Listen, die folgendermaßen aussieht entweder [[int,int,str], [int, int, str]] oder [[str, int, int], [str, int int]], dann würde ich gerne den Konstruktor einfach nur die Liste übergeben damit er selbst herausließe welche Spaltentypen er benötigt.
BlackJack

@martinjo: Dazu müsste die komplette Liste durchlaufen und getestet werden und man hätte eventuell auch noch Probleme wenn dort Untertypen verwendet werden die aber keine ”gültigen” Spaltentypen sind. Das wäre ein bisschen viel Magie für meinen Geschmack.
Benutzeravatar
diesch
User
Beiträge: 80
Registriert: Dienstag 14. April 2009, 13:36
Wohnort: Brandenburg a.d. Havel
Kontaktdaten:

Du kannst sowas wie

Code: Alles auswählen

lstore = gtk.ListStore(*[type(i) for i in liste[0]])
machen.

Das setzt natürlich voraus, dass deine Liste nicht leer ist.
http://www.florian-diesch.de
BlackJack

@diesch: Und das alle Werte in einer Spalte den gleichen Typ haben.
Benutzeravatar
diesch
User
Beiträge: 80
Registriert: Dienstag 14. April 2009, 13:36
Wohnort: Brandenburg a.d. Havel
Kontaktdaten:

BlackJack hat geschrieben:@diesch: Und das alle Werte in einer Spalte den gleichen Typ haben.
Das müssen sie sowieso, sonst funktioniert das Hinzufügen als Zeilen nicht.
http://www.florian-diesch.de
BlackJack

@diesch: Sicher? Ich kann bei einer `int` Spalte kein `bool` übergeben? Das ist ja ein Untertyp von `int` und problemlos als ganze Zahl behandelbar.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ich hab das Thema mal verschoben, bitte das nächste mal im richtigen Unterforum aufmachen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
martinjo
User
Beiträge: 186
Registriert: Dienstag 14. Juni 2011, 20:03

Vielen Danke für eure Hilfe, ich werde sicher in den nächsten Tagen noch des öfteren mal etwas fragen, macht gerade richtig Spaß mit GTK, auch wenn es bei einigen Dingen recht kompliziert ist da oft das eine zum nächsten führt wie Combobox → ListStore → CellRendererText
diesch hat geschrieben:lstore = gtk.ListStore(*[type(i) for i in liste[0]])
Genau das habe ich gesucht, Super, ich habe schon befürchtet ich muss die Kommas auch noch selbst einfügen, aber die sind ja bei einer Liste schon drin 8)

@Leonidas Danke
Antworten