QComboBox-Instanzen dynamisch benennen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich habe folgendes Problem:

Ich habe eine Liste die folgendermaßen aussieht:

Code: Alles auswählen

list = ("a, b", "c, d")
(als Bsp.)

Ich möchte nun in einer Funktion soviele QComboBox-Instanzen erzeugen, wie die Liste Elemente hat, also bei 5 Elementen sollen 5 QComboBoxes erzeugt werden.
Das Problem ist, dass ich nicht weiss, wie ich die Comboboxen systematisch benennen kann, so dass ich sie getrennt ansprechen kann.
Gibt es eine Möglichkeit, wenn ich z.B. eine QComboBox folgendermaßen instanziiert habe:

Code: Alles auswählen

abc = QComboBox()
diese umzubenennen, so dass sie nicht mehr über den Namen "abc", sondern über "xyz" referenziert wird?
BlackJack

@Caldar: Fang bloss nicht an dynamisch Namen zu erzeugen. Was spricht dagegen die `QComboBox`-Objekte einfach in eine Liste zu stecken?
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Das ist eine gute Idee, die ich mir schon überlegt habe, leider haperts an der Umsetzung. Also folgendermaßen hab ichs probiert:

Code: Alles auswählen

combolist = []

for entry in list:
    combo = QComboBox()
    list.append(combo)
         
Nun habe ich die Combo-Instanzen in der list-Liste drin.
Jetzt will ich je nach Größe der Liste so viele Comboboxen bauen, wie list Elemente hat (das Layout wurde vorher erstellt und funktioniert auch.
Aber wenn ich das so wie jetzt beschrieben mache, wird weder ein Widget erstellt noch sonst etwas angezeigt:

Code: Alles auswählen

n = 0
for x in list:
    x.addItem(combo_entries[n])
    n += 1
    self.layout.addWidget(x)   
Was mache ich hier für einen Fehler?
BlackJack

Caldar: Äh, das ganze jetzt nochmal mit etwas nachdenken. Alleine im ersten Quelltextschnippsel drängt sich doch schon die Frage auf, warum Du nichts in `combolist` steckst, sondern an die Liste anhängst über die Du iterierst.

Und beim zweiten wäre es mal nett zu wissen was `list` überhaupt enthält.

Desweiteren sollte man den Namen `list` nicht neu Binden, das ist ja schon an den eingebauten Typ gebunden, und statt dem `n` als Index, bitte die `zip()`-Funktion verwenden, um über zwei Listen parallel zu iterieren.
Caldar
User
Beiträge: 46
Registriert: Sonntag 17. Mai 2009, 18:20

Ich glaube, ich habe es zum Laufen gebracht, danke für Deine Tipps BlackJack, bin noch blutiger Anfänger in Sache GUI-Programmierung.

Ich werde die fertige Sache posten, sobald ich soweit bin, muss nachher gleich weg, aber ich meld mich heute abend mit der Sache evtl. nochmal.

Trotzdem, nochmals vielen Dank bis jetzt.
Antworten