PyQt 4 QListWidget

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

Hallo Zusammen,

ich habe eine kurze Frage. Ich verwende in einer GUI das QListWidget. Jetzt finde ich auf der riverbank Seite in den Docs zwar alle Methoden, die das Widget hat - nur leider keine um mir die List Items anzeigen zu lassen:

http://www.riverbankcomputing.co.uk/sta ... idget.html

Ich konnte das Problem umgehen, indem ich anhand der listengroesse die items per index und Schleife durchgegangen bin. Aber wenn ich bei alltaeglichen Sachen, also bei einer Liste den Inhalt auslesen, schon aussen rum scripten muss, mache ich meistens was falsch.

Es gibt zwar ne Methode:
list-of-QListWidgetItem items (self, QMimeData)

nur hab ich keine Ahnung was ich da uebergeben muss, um die zu rufen.

Freu mich ueber jeden Hinweis.

Vielen Dank.
Zuletzt geändert von Leonidas am Freitag 28. Mai 2010, 17:20, insgesamt 1-mal geändert.
Grund: In PyQt-Forum verschoben :-/
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

So wie es aussieht, geht es aber nicht anders. Und so dramatisch finde ich das nun auch nicht:

Code: Alles auswählen

items = (listwidget.item(i) for i in xrange(listwidget.count()))
Bedenke, dass PyQt ein Wrapper ist, der eben nicht alles mögliche selbst dazu implementiert. Für `count()` könnte man ja in Python auch besser ein `@property` nehmen, was ebenfalls nicht getan wird.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

outoftune hat geschrieben:Jetzt finde ich auf der riverbank Seite in den Docs zwar alle Methoden, die das Widget hat - nur leider keine um mir die List Items anzeigen zu lassen:
Was bedeutet "anzeigen"? Darunter kann ich mir nichts passendes vorstellen. Angezeigt werden die doch automatisch durch das ListWidget!?!

Oder meinst Du wirklich, dass Du Dir die kompletten Einträge zurückliefern lassen möchtest?

Prinzipiell verwende ich seit einiger Zeit nur noch die "Q*Views", da diese model-based sind. Dort könntest Du Dir tatsächlich das model aus dem View "zurückholen". Ich persönlich halte aber sowieso gerne einen Namen im Objekt an das Model gebunden und komme damit selten in diese Verlegenheit.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

snafu hat geschrieben:

Code: Alles auswählen

items = (listwidget.item(i) for i in xrange(listwidget.count()))
Deine Variante ist ein wenig eleganter. Danke.
Hyperion hat geschrieben:Ich persönlich halte aber sowieso gerne einen Namen im Objekt an das Model gebunden und komme damit selten in diese Verlegenheit.
Das verstehe ich leider nicht :(

Bin noch absolut gruen hinter den Ohren was Python und/oder PyQt angeht. Hab bisher GUI Sachen immer direkt in meiner 3D Software selbst gemacht und muss mich erst noch an das was man in der echten Welt so macht erst noch gewoehnen.

Merci vielmals fuer die Rueckmeldung.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

Ich verwende die QListWidget Klasse folgendermassen:

Code: Alles auswählen

for e, level in sorted(currentEvents):
    label = QtGui.QListWidgetItem('%s' % (self.string_db.get_string('STR_EVENT_%d' % e)))
    label.setTextColor(QtGui.QColor('%s' % self.get_color(level)))
    if i % 2:
        label.setBackgroundColor(QtGui.QColor('#dddddd'))
    i += 1
    self.listWidget.addItem(label)
Das QListWidget agiert nur als Container. Jedes Item das du dem Widget hinzufügst wird auch angezeigt.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

In den Zeilen 2 und 3 ist das String-Formatting teilweise überflüssig. str(…) bietet sich da doch eher an, wenn man schon ein str Objekt erzwingen möchte.
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

vielen Dank, da hast du natürlich Recht. Keine Ahnung warum ich das nicht weggelassen habe :K .
Antworten