"dynamische" ENUMS generieren (oder so ähnlich)

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Hi zusammen,

Meine Ausgangssituation:
TableView mit ca 30 Spalten
Ein Tuple mit den Spaltennamen.

In meinem Model möchte ich auf die Spalten mittels ENUMS zugreifen da bei 30 Spalten mit Zahlenindex zu schaffen doch sehr sehr verwirrend ist.

Bsp:

Code: Alles auswählen

PARAMETER_1, PARAMETER_2, ..., PARAMETER_n = range(n)

# im Model
def data(self, index, role=Qt.DisplayRole):
      .
      .
        if role == Qt.CheckStateRole:
            if column == PARAMETER_1: # Spalte 1
                return QVariant(landuse.getWater())
            elif column == PARAMETER_2: # Spalte 2
                return QVariant(landuse.getFertil())
            elif column == PARAMETER_3: # Spalte 3


                             usw.

jetzt hab ich aber das Problem, dass sich die Anzahl der Parameter noch verändern wird oder Namen neu vergeben werden. Schlicht, das sollte leicht anpassbar sein.

Um nicht zuviele stellen nach einer Änderung anpassen zu müssen
(vor allem zwei Listen von hand synchronisieren)
war mein Plan dass ich mein Spaltennamen-Tupel Automatisch in eine ENUM Liste verwandel.
Dadurch könnte ich auch recht einfach mit der Codevervollständigung auf die Enums zugreifen. Weil genau das geht mit einem Tuple oder Liste etc. nicht.

Irgendwie finde ich darüber aber nicht viel und mir kam der Verdacht das die
Vorgehensweise nicht sonderlich schlau sei.

Hat jemand eine Idee wie ich das umsetzten/lösen kann ?

Gruß
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Mir scheint ich hab zu kurz gedacht.
Ist ja echt völliger Quatsch.
Ich kann ja nie und nimmer auf eine zur Laufzeit erstellte Enum List zugreifen wärend ich implementier ... :roll:

siehe:
http://forum.fachinformatiker.de/c-c/11 ... fzeit.html
BlackJack

@ichisich: Du wirfst hier Sprachen durcheinander. Bei C ist der Datentyp ``enum`` etwas statisches. C ist halt eine statische Sprache.

In Python gibt's grundsätzlich erst einmal keinen entsprechenden Datentyp, jedenfalls nicht im Sprachkern oder in der Standardbibliothek. Du hast da einfach ein paar Konstanten definiert.

Es gibt aber ein paar `Enum`-Klassen von Drittanbietern. Kannst ja da mal schauen, ob was passendes dabei ist.

Und Du kannst Dir natürlich auch selber was basteln, was so ein Dingens über das Du mit Indizes zugreifen möchtest, "wrappt" und Attribute für den Zugriff zur Verfügung stellt. Das geht selbstverständlich auch dynamisch. Python ist halt eine dynamische Sprache. :-)
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Ich habe spontan an ein Dictionary gedacht, macht das vielleicht das, was du brauchst?
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Danke für die Antworten.

@BlackJack

jetzt wo Du es sagst sind es natürlich einfache Konstanten die sich besser lesen lassen als meine Zahlen :lol:
Aber ob Konstanten oder Enums, ich brauche sie nicht erst zur Laufzeit, da ich mir ja vorallem das Tippen sparen will, von daher hatte ich schon im Ansatz eine Denkfehler.

Von daher geht es doch in Richtung @mkesper Idee mit den Dictionary.

Letztendlich hab ich eine Klasse gemacht mit allen Spalten als Dictinoary, darin enthalten der Index, Name und Wert. So kann ich auf alles relativ bequem zugreifen und weiß immer wo ich mich befinde.

Danke noch mals für die Hilfe.

Gruß
Antworten