Pyqt QColumnView Listenabfrage aus SQLite

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
F1r3fly
User
Beiträge: 6
Registriert: Donnerstag 21. März 2019, 21:44

Freitag 29. März 2019, 20:45

Hi,

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()])
Aufgerufen über

Code: Alles auswählen

        model = ArtModel(art)
        self.ui.columnview.setModel(model)
Wobei "art" eine Liste der Arten ist.
Antworten