wie bereits im anderen Thread geschrieben, schreibe ich mir gerade ein Plugin für QGIS basierend auf Python 3 und QT, wobei ich mit Python und QT noch am Anfang stehe. Mein letztes großes Problem an dem ich schon lange hänge ist das Entwerfen eines Models für ein QColumnView.
Ich habe in einer SQLite-Datenbank eine Reihe von Tierarten gespeichert, die ich normalerweise in DropDowns verwende. Allerdings ist bei einigen Abfragen die Liste so lang, dass selbst ein ListWidget nicht praktikabel ist. Ich bin dann auf ColumnView gestoßen und möchte gerne in der ersten Spalte eine Kategorie von Tieren anzeigen lassen (Fisch, Säugetier, Vogel), die dann in der zweiten Spalte die Tiere in der Kategorie anzeigt (Lachs, Forelle, Barsch).
In der SQLite gibt es die Kategorien bereits für jede Tierart. Ich rufe daher als Erstes die Spalte mit den Kategorien aus der Datenbank ab und entferne alle Duplikate um eine Liste mit allen Kategorien zu erhalten. Im zweiten Schritt müsste ich dann die Spalte mit den Tiernamen nach Kategorie gefiltert abrufen. Den ganzen Vorgang muss ich meines Wissens nach in einem Model abbilden und das Model dann an der ColumnView übergeben.
Ich habe nur ehrlich gesagt keine Ahnung wie ich das als Model umsetzen soll. Es ist normalerweise nicht meine Art ohne eigenen Code eine Frage zu stellen, aber hier weiß ich nicht wirklich wo ich ansetzen soll, da das ehrlicherweise meine Fähigkeiten übersteigt. Auf der Suche nach Tutorials im Netz habe ich bis jetzt auch keine vernünftige Hilfen gefunden.
Kann mich jemand von euch auf die richtige Spur bringen oder zumindest ein vernüftiges Tutorial empfehlen.
Bisher habe ich lediglich eine Class für das Model erzeugt, dass mir alle Arten an die Columnview übergibt.
Class
Code: Alles auswählen
from PyQt5 import QtGui, QtCore, uic
import sys
class ArtModel(QtCore.QAbstractListModel):
def __init__(self, arten = [], parent = None):
QtCore.QAbstractListModel.__init__(self, parent)
self.__arten = arten
def rowCount(self, parent):
return len(self.__arten)
def data(self, index, role):
if role==QtCore.Qt.DisplayRole:
return QtCore.QVariant(self.__arten[index.row()])
Code: Alles auswählen
model = ArtModel(art)
self.ui.columnview.setModel(model)