ObjectListView -> wx.ListCtrl-wrapper

Plattformunabhängige GUIs mit wxWidgets.
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

ObjectListView -> wx.ListCtrl-wrapper

Beitragvon ElSids » Freitag 18. Juli 2008, 13:28

Auf der Suche Hilfen bei der Anwendung des wx.ListCtrls bin auf folgenden wrapper gestoßen:

ObjectListView, zu finden unter http://objectlistview.sourceforge.net/python/index.html

Er scheint mir viel sprechend in seinen Anwendungsmöglichkeiten zu sein und vor allem leicht zu handhaben.

Leider ist die Dokumentation aufs äußerst Wesentliche schränkt. Daher die Frage, ob jemand in diesem Forum bereits Erfahrungen mit ObjectListView gesammelt hat.
In meinem speziellen Fall gelingt es mir nicht, in Tuples/Listen importierte Daten einer Datenbank (SQlite) in das ListCtrl einzulesen. Das ListCtrl selbst wird problemlos angezeigt.

ElSids
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Beitragvon fred.reichbier » Montag 21. Juli 2008, 14:06

Hallo,

ich finde dieses Beispiel recht gut zu verstehen - hast du vielleicht keine Objektlisten, sondern irgendwas anderes angelegt? Zeig doch einfach mal ein bisschen Code :)

Gruß Fred
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

Beitragvon ElSids » Freitag 8. August 2008, 13:54

Hallo Fred,

ich habe leider erst jetzt bemerkt, dass jemand auf meine Frage geantwortet hat.

Mein Problem ist nicht ein Frame mit einem ObjectListView zu erstellen, sondern das ListView mit Werten zu füttern.
Die Werte selbst stammen aus einer SQL-Abfrage und liegen als eine Liste mit Tuples (Records) vor.
Beispiel:

Code: Alles auswählen

[(1, "Franz", "Kaiser", 1960-10-23, 500.23), (2, "Helga", "Meier", 1956-01-03, 250.50)]


Ich denke nicht, dass es sich hierbei um das, was du "Objektlisten" nennst, handelt. Wie wandele ich nun diese Tuple-Liste in eine Objektliste um. Sagen wir mal ich hätte 2000 jener records aus obigem Beispiel

Bei den Beispielen auf der Homepage sind, zumindest für mich, eine Reihe von objecten angegeben, die unerklärt einfach da sind

Code: Alles auswählen

self.songs = ExampleModel.GetTracks()

Womöglich habe ich es übersehen, aber wo ist ExampleModel.py einzusehen?

ElSids
Dr.Network
User
Beiträge: 11
Registriert: Mittwoch 26. März 2008, 12:35

Beitragvon Dr.Network » Sonntag 24. August 2008, 19:01

Du musst eine Klasse bilden und eine Funktion die deine Liste in Instanzen deiner Klasse verwandelt und in einer liste ablegt

also zum Beispiel ist aus dem kopf ungetestet also keine ahnung obs sofort klappt:

Code: Alles auswählen

class Record(object):
     """ a class for my records
     """
     
     def __init__(self, id, fname, lname, date, zahl):
          self.id = id
          self.fname = fname
          #usw.
     
def list2objectlist(list):
     """ Creates a List of objects
     """
     objectlist = []
     for id, fname, lname, date, zahl in list:
          objectlist.append(Record(id,fname,lname,date,zahl))
     return objectlist

objectlist = list2objectlist(list)
ElSids
User
Beiträge: 16
Registriert: Montag 25. Juni 2007, 13:15
Wohnort: Corciano/Italien

Beitragvon ElSids » Montag 25. August 2008, 14:13

Vielen Dank für den Tip. Mittlerweile hatte ich es selber herausgefunden.
Meine Lösung sieht folgendermaßen aus:

Die Classe (Beispiel):

Code: Alles auswählen

class Person(object):

    def __init__(self, name, vorname, alter, #usw.):
        self.name = name
        self.vorname = vorname
        self.alter = alter
        #usw.


Umwandlung in Classenliste:
Das 'self' steht hier für ein wx.Frame mit einem
ObjectViewList 'self.OVL'

Code: Alles auswählen

def InitModel(self):
    self.mylist = []
    tpl_risult = #sql-Abfrage aus einer Datenbank
    for item in tpl_risult:
        self.mylist.append(Fattura(item[0],item[1], item[2], #usw.))


Füllen des ObjectListView mit:

Code: Alles auswählen

self.OLV.SetObjects(self.mylist)


Natürlich fehlen hier alle sonstigen Programmschritte.

Im Übrigen kann ich diesen ListCtrl-Wrapper allen nur wärmstens empfehlen. Sortieren, Gruppieren, Auslesen und Ändern von Einträgen sind wirklich erstaunlich einfach.
Frage ist: Wie kennzeichne ich diesen threat als gelöst [solved]?

Nochmals danke
ElSids

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder