2016-03-24 6 views
1

Bitte sehen Sie sich das Bild an. Das untere Widget ist ein Listen-Widget. Es funktioniert so. Wenn Sie auf Einfügen klicken, wird ein neues QListWidgetItem dynamisch im unteren ListWidget hinzugefügt. Jetzt gibt es drei Elemente im Widget. Jedes Element kann enthalten Checkboxen, Comboboxen, LineEdit etc ..Alle Daten von ListWidgetItem PyQt4 abrufen

enter image description here

ich all diese Daten aus dem listWidgetItem erhalten müssen. Leider ist die listwidgetitem.text() die einzige Möglichkeit, Daten aus dem Element abrufen. Was dann zu tun, um alle diese Daten zu erhalten.

+0

Sagen Sie, dass jedes ListWidget-Objekt mehrere Daten enthält, die Sie anzeigen und bearbeiten möchten? –

Antwort

1

Sie sollten nicht (im Allgemeinen) verwenden QListItemWidget dafür, sondern eine richtige QAbstractItemModel-Unterklasse. Damit können Sie Ihr Listenwidget mit den von Ihnen gewünschten Daten sichern und auf diese Daten zugreifen.

Es ist ein Dienstprogramm-Klasse namens verfügbar bereits QStandardItemModel, die von QAbstractItemModel erbt, und sollten Sie schnell gestartet.

Custom QStandardItemModel with custom data method

+0

Können Sie bitte ein Beispiel für die obige Lösung veröffentlichen, die nur eine CheckBox als Elementelement enthält. Das obige Beispiel aus dem Link führt Fehler :( 'PyQt4.QtCore.QVariant ein zugeordnetes Typ darstellt und kann nicht instantiated' – ameen

+0

haben Sie versucht, für andere Beispiele von QAbstractListModel suchen? Es ist auch sehr gut dokumentiert ist. – deets

+1

auslassen die beiden Vorkommen von 'QVariant()', zB Rückkehr nur 'self.listdata [index.row()]' – ngulam

1

können Sie mehrere Stücke von beliebigen Daten speichern auf einem QListWidgetItem (in der Tat, die alle Artikel Widgets dies unterstützen). Sie müssen eine benutzerdefinierte Rolle für Ihre Daten definieren.

Data1Role = QtCore.Qt.UserRole + 1 
Data2Role = QtCore.Qt.UserRole + 2 

item = QtGui.QListWidgetItem() 
item.setData(Data1Role, 'Any data') 
item.setData(Data2Role, 42) 

print item.data(Data1Role) 
# "Any data" 

jedoch werden diese Daten nicht überall auf der QListWidgetItem angezeigt werden. Die einzigen Daten, die standardmäßig angezeigt werden, sind die Daten auf der QtCore.Qt.DisplayRole (die text() und setText() verwenden).

Sie sind wahrscheinlich besser dran mit einer QTreeWidget, die mehrere Spalten unterstützt (für die mehreren Daten) und eine benutzerdefinierte Unterklasse von QTreeWidgetItem erstellen. Wenn Sie der Benutzer in der Lage sein wollen, die Daten in der Tabelle zu bearbeiten, wirst du brauchen eine QItemDelegate als auch zu schaffen, die QLineEdits und QComboBoxes für die Bearbeitung der Daten zu erstellen.