Objekt in ein QListWidget/QComboBox/usw einfügen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hallo,

ich habe eine Frage, die mich schon seit einiger Zeit beschäftigt: Wenn ich ein QListWidget (oder irgendeine andere Auswahlliste) habe (auch Tabellen o.ä.), füge ich bislang Einträge einfach nur als String hinzu (Also z.b. mit addItem("Test"). Das klappt ja auch schön und gut, allerdings habe ich dann danach das Problem, auf die dazugehörigen Informationen zuzugreifen.

Ein Beispiel:

Ich habe eine Liste mit mehreren Objekten. In das QListWidget soll nun von jedem Objekt nur das name-Attribut eingefügt werden (Bis hierhin kein Problem). Wenn ich dann in dem QListWidget einen Eintrag auswähle, sollen die anderen Attribute in einem zweiten Widget erscheinen.

Ich kann jetzt natürlich einfach den Namen oder die Position im QListWidget mit dem in der ursprünglichen Liste vergleichen, aber irgendwie scheint mir das etwas fehlerbehaftet zu sein: Der Name könnte ja doppelt vorkommen und anhand der Position ist eventuell auch nicht so gut (Vielleicht lässt sich die Reihenfolge im QListWidget ändern). Am einfachsten wäre es daher, wenn ich in das QListWidget direkt das Objekt selber einfügen könnte, und wenn dann etwas angeklickt wird, gibt das QListWidget das Objekt selber zurück.

Geht das wohl irgendwie oder muss ich das immer umständlich mit der Position oder dem Namen erledigen? Ich habe schon etwas in der Dokumentation geschaut, aber dort muss anscheinend immer ein QListWidgetItem hinzugefügt werden, was anscheinend nur Text und Icons halten kann, aber keinen Verweis auf ein Objekt selber.

Danke :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Schau Dir mal die Model zentrierten Klassen von Qt an; hier wird das von Dir selber bemerkte Problem schön als Motivation zur Einleitung in die Thematik aufgegriffen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Ah, also muss ich mich wohl doch mit der Model-View-Architektur beschäftigen :D Da wollte ich mich noch ein wenig drum drücken bis ich etwas fitter allgemein mit Python und Qt bin :D

Naja, ich habe es jetzt zuerst einmal recht simpel mit der Position gemacht, aber ich schau mir jetzt mal das Tutorial an. Wenn das gut ist, werd ich das wohl noch implementieren.

Danke :)
Benutzeravatar
Madmartigan
User
Beiträge: 200
Registriert: Donnerstag 18. Juli 2013, 07:59
Wohnort: Berlin

Nur als Anmerkung, die Referenzierung über die "Position", du meinst sicher den Index, ist nicht fehlerbehaftet oder etwas Halbgares sondern exakt wie diese einfachen Widget zu verwenden sind.
QListWidget, QTableWidget usw. sind eben genau für die Anwendungsfälle vorgesehen, bei denen du dir um MVC keine Gedanken machen willst/musst. Sollten sich Indices ändern, kann man darauf reagieren und etwaige, wie in deinem Beispiel abhängige, Listen umsortieren.
Hellstorm hat geschrieben:Da wollte ich mich noch ein wenig drum drücken bis ich etwas fitter allgemein mit Python und Qt bin
Wenn du sowieso Einsteiger bist, kannst du dir auch gleich MVC aneignen. Das schadet nicht! ;-)
Hellstorm
User
Beiträge: 231
Registriert: Samstag 22. Juni 2013, 15:01

Hab jetzt bei Youtube ein Tutorial dazu gefunden. Model/View scheint mir ja doch gar nicht so schwer zu sein und macht im Gegenzug alles wesentlich einfacher.

Danke für den Motivationsschub :D
Antworten