Namen eindeutig als QListWidget auslesen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Hallo, ich bräuchte mal euren Rat bzgl. folgendem Problems:
Ich schreibe mir eine Schülerverwaltung, in der jeder Schüler eine Instanz der Klasse Schueler() ist. Die Schüler haben u.a. die Attribute nachname und vorname.
Die Schüler eines Kurses werden in einer Liste verwaltet, in der sie nach Nachnamen geordnet sind. Innerhalb des Programms generiere ich öfters ein QListWidget aus dieser Liste. Jedes Item hat den Text zusammengesetzt aus vorname + nachname.
Nun möchte ich ja je nach ausgewählten Item den Schüler aus meiner Liste ansprechen können. Solange ich die vollständige Liste habe, ist das kein Problem, da nehme ich einfach den Index des ausgewählten Items und komme so an einen Schüler.
Es kommt aber auch vor, dass nur einzelne Schüler im QListWidget auftauchen, so dass ich nicht über den Index gehen kann. Mein bisheriges Verfahren war, dass ich den Text des Items nach Leerzeichen gesplittet habe und den letzten Eintrag als Nachnamen ausgelesen habe. Das Verfahren funktioniert aber natürlich nicht, wenn der Nachname z.B. 'van der Vaart' heißt.
Meine Idee, war es nun, die Namen in der Form 'nachname, vorname' einzutragen, da man dann eindeutig auf ' ,' splitten kann. Ich würde aber eigentlich gerne bei der ursprünglichen Darstellung des Namens bleiben und auch die Methode über split finde ich irgendwie unschön.

Habt ihr noch eine Idee, wie man es sonst lösen könnte? Natürlich könnte man auch den ganzen Namen, also Vor- und Nachname als einziges Attribut dem Schüler zuweisen, jedoch möchte ich in einer späteren Version auch die Möglichkeit haben die Schüler nur mit Rufnamen anzeigen zu lassen, damit da nicht immer "Karl Theodor Maria" steht ;)

Gruß
EmaNymton
lunar

Wenn Du Objekte über ihre Anzeigedaten identifizieren musst, ist etwas schief gelaufen. Konkret helfen kann man Dir ohne Beispielquelltext allerdings nicht, da nicht bekannt ist, wie Du die Daten aus der internen Liste in die Darstellung überträgst.

Idealerweise allerdings würdest Du eine Modell-Klasse für die Schüler schreiben (abgeleitet von QAbstractItemModel). Dieses Modell würde dann in verschiedenen Spalten alle wichtigen Daten über einen Schüler halten (e.g. Vorname, Nachname, usw.). Mithilfe eines Proxymodells kannst Du dann verschiedene Darstellungen aus diesem Modell extrahieren.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

Danke, du hast mir schon sehr geholfen. Bisher habe ich mich nämlich um die Model-View-Geschichte immer herumgedrückt, da ich den Vorteil bei einer geringen Datenmenge nicht gesehen habe, bzw. die Einarbeitungszeit gescheut habe.
Werde mir das aber dann mal zur Gemüte führen!
Gruß
EmaNymton
BlackJack

@EmaNymton: Nur so am Rande: Identifikation alleine über den Namen ist sowieso nicht genug. Es kann ja durchaus passieren das zwei Schüler den gleichen Namen haben.
EmaNymton
User
Beiträge: 174
Registriert: Sonntag 30. Mai 2010, 14:07

@BlackJack: Ja, da magst du Recht haben, dass dies rein theoretisch eintreten kann. Aber diese Möglichkeit kommt in der Realität nicht vor, da dies bei der Klassen bzw. Kurszusammenstellung berücksichtigt wird. Allein schon um nachher eine Verwiirung bei der Notenvergabe zu vermeiden :lol:
Deswegen hatte ich mich auf Vorname, Nachname als eindeutiges Erkennungsmerkmal festgelegt.
BlackJack

@EmaNymton: Berühmte letzte Worte. Lass das Programm mal ein paar Jahr laufen, dann möchte irgend jemand eine Recherchemöglichkeit und schon können Schüler mit dem gleichen Namen in Ergebnislisten auftauchen.

Oder das Problem mit den Tauf- und Rufnamen beim neuen Personalausweis taucht auch irgendwann bei Schulen auf. :-)

Edit: Oder es gibt einen Kurs bei dem die Teilnehmerzahl nur für eine "Klasse" reicht und da wollen zwei Peter Müller rein. Soll man denen dann sagen, "Sorry, einer von euch muss was anderes machen, unsere Software kann das nicht."!? In einem Kurs in der Uni wurde mein Übungspartner mal angesprochen, dass er sich doch bitte für *eine* Übungsgruppe entscheiden soll. Es stellte sich heraus, dass es noch jemandem mit dem gleichen Vor- und Nachnamen in dem Kurs gab. Und der Nachname war noch nicht einmal Meier, Müller, oder Schulze. Soviel zum Thema Realität.
Antworten