Frage

Ich möchte eine Liste von Menschen, die Namen aus einer Warteschlange und für jede Person, abzurufen, legen Sie eine Checkbox mit ihrem Namen zu einem QGridLayout die addWidget () Funktion. Ich kann erfolgreich die Einzelteile in QListView platzieren, aber sie schreiben Sie einfach über den den jeweils anderen, anstatt eine neue Zeile zu erzeugen. Hat jemand irgendwelche Gedanken darüber, wie ich dieses Problem beheben könnte?

self.chk_People = QtGui.QListView()
items = self.jobQueue.getPeopleOffQueue()

for item in items:
    QtGui.QCheckBox('%s' % item, self.chk_People)

self.jobQueue.getPeopleOffQueue () zurückkehren würde so etwas wie [ 'Bob', 'Sally', 'Jimmy'], ob das hilft.

War es hilfreich?

Lösung

Diese Zeile:

QtGui.QCheckBox('%s' % item, self.chk_People)

Ist das Kontrollkästchen in die Listenansicht nicht hinzufügen, schafft es nur mit der Listenansicht als Mutter, und es gibt einen großen Unterschied.

Der einfachste Weg, eine Listenansicht zu verwenden, ist die QListWidget Komfort-Klasse. Dazu Ihre Kontrollkästchen als Instanzen von QListWidgetItem zu erstellen und dann addItem auf der Liste Widget verwenden, um sie wirklich, um es hinzuzufügen.

Haben Sie ein Problem, sie zu einem Raster-Layout hinzuzufügen? Normalerweise, wenn die Menge von Kontrollkästchen Sie haben klein ist ein Raster-Layout besser sein könnte - es hängt alles davon ab, wie Sie möchten, dass Ihre App zu suchen. Aber wenn Sie könnten eine Menge solcher Objekte haben, dann eine Liste Widget / Ansicht ist die beste.

Andere Tipps

Ich kann Ihnen nicht die Lösung in PyQt sagen, aber die Struktur, die Sie folgen müssen, ist die folgende. Die QListView kann tun, was Sie brauchen, Sie brauchen keine separaten Kontrollkästchen zu erstellen. Erstellen Sie eine Unterklasse von QAbstractItemModel oder QStandardItemModel (je nachdem, wie viel Codierung Sie tun wollen) überschreiben die flags() Methode zurückkehren, um die entsprechenden Flags mit Qt::ItemIsUserCheckable im columncount() Verfahren eine zusätzliche Spalte hinzuzufügen, das Kontrollkästchen enthalten und in der data Verfahren für die Spalte, wo Sie Ihre Kontrollkästchen angezeigt werden soll zurückkehren den Überprüfungsstatus Qt::Checked, Qt::Unchecked für die Qt::CheckStateRole.

Dies kann auch erreicht werden, indem die QListWidget , wo Sie QListWidgetItem Hinzufügen von Daten und müssen nicht um ein Modell zu erstellen. Auf QListWidgetItem können Sie setFlags() und setData(QVariant(bool, Qt::CheckStateRole) ohne Unterklasse ein Modell

verwenden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top