Seite 1 von 1

Objektname mit Variable

Verfasst: Samstag 21. März 2015, 10:38
von monny
Hallo,

ich bin Python-Neuling und brauch eure Hilfe bei folgendem Problem:
Ein Widget wurde mit Qt-Designer erstellt und im Programm geladen. In diesem Widget befinden sich nun 6 "frames" die ein Foto verdecken.
Ich möchte nun in einer For-Schleife jedes dieser Frames verändern. Vorher erstelle ich eine Liste, die die Namen laut Qt-Designer als Strings enthalten um sie in der Schleife an den "Qt-Aufruf" zu übergeben:

Code: Alles auswählen

Frames = ["frame1", "frame2", ...]
.
.
def raten():
    for each in Frames:
        w.each.setAutoFillBackground(0)
Dieser Code funktioniert leider nicht da das Argument "each" natürlich nicht im Widget bekannt ist.
Wie kann ich den Inhalt der Variable an den Aufruf übergeben? Vielleicht ist auch mein Ansatz total falsch?!

Gruß Markus

Re: Objektname mit Variable

Verfasst: Samstag 21. März 2015, 10:53
von Madmartigan
Du legst da ja auch strings in die Liste. Damit weiß self natürlich nichts anzufangen.
Stattdessen könntest du, wenn du so vorgehen möchtest, die Widgets direkt in die Liste packen.

Bsp:
Der Objektname der Frames ist tatsächlich frame_1, frame_2, ... usw.
Dann wie folgt:

Code: Alles auswählen

frames = [self.frame_1, self.frame_2, ... usw.]

def raten():
    for frame in frames:
        frame.setAutoFillBackground(0);

Re: Objektname mit Variable

Verfasst: Samstag 21. März 2015, 11:00
von monny
Natürlich! :roll:
Das funktioniert natürlich wie erwartet.
Vielen Dank!

Re: Objektname mit Variable

Verfasst: Samstag 21. März 2015, 11:15
von Sirius3
@monny: immer wenn man anfängt, Variablen durchzunummerieren, will man eigentlich von Anfang an eine Liste haben und nicht erst bei Bedarf eine erstellen. Die Frames werden ja irgendwo erzeugt, und das hoffentlich schon in einer for-Schleife, die dann automatisch zu einer Liste von Frames führt.

Re: Objektname mit Variable

Verfasst: Montag 23. März 2015, 20:33
von monny
Hallo Sirius,

das Problem war das ich das widget mit dem Designer erstellt und somit die Namen händisch vergeben habe. Ich bin nun auf die Erstellung mit tkinter umgesattelt. Ich denke so habe ich doch mehr Kontrolle...