Mit Schleife über Variablennamen iterieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Shiva420
User
Beiträge: 12
Registriert: Dienstag 16. Februar 2016, 01:42

Hey leute!

Ich habe ein recht banales Problem und komme schlichtweg nicht auf die Lösung, vllt kann mir ja jemand fix nen Denkanstoß geben. :)

Folgendes Geschehen:

Ich habe mit pyqt eine GUI gebastelt und in der gui sind 25 kleine vierecke als label-bilder (Das Spielboard von satoshimines)
Während der Bot läuft verändert sich das Bild der 25 Teile konstant.
Dies musste ich allerdings bei jedem Bild etwas peinlich umsetzen, folgender code:

Code: Alles auswählen

	#Reset GUITiles
        self.tile1.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile2.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile3.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile4.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile5.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile6.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile7.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile8.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile9.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile10.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile11.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile12.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile13.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile14.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile15.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile16.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile17.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile18.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile19.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile20.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile21.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile22.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile23.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile24.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
        self.tile25.setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
Wie ihr seht ist mein konkretes Problem der Name der jeweiligen Labels (tile1, tile2, tile3, tile4 usw)
Ich denke man sollte doch recht simpel per Schleife darüber iterieren können, allerdings funktionieren Versuche wie etwa den Label namen durch eine Variable + i zu ersetzen nicht.

Was habe ich für Möglichkeiten?
Danke für eure Hilfe! :)
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Listen. Ganz tolle Sache.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Was DasIch gesagt hat.
In specifications, Murphy's Law supersedes Ohm's.
Shiva420
User
Beiträge: 12
Registriert: Dienstag 16. Februar 2016, 01:42

Alle beispiele zu Listen die ich finde beinhalten leider nicht mein direktes Problem. :(
Ich habe jetzt einfach mal folgendes (erfolglos) probiert.

Code: Alles auswählen

            #Reset GUITiles

            tiles = ["tile1", "tile2"]

            self.tiles[0].setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
            self.tiles[1].setPixmap(QtGui.QPixmap(_fromUtf8("tileNew.png")))
Könnte ich vllt. noch einen Tipp bekommen? :mrgreen:
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@Shiva420: Zeichenketten werden nicht automagisch zu Attributen oder Variablen. Du mußt die konkreten Objekte in die Liste speichern:

Code: Alles auswählen

tiles = [self.tile1, self.tile2]
pixmap = QtGui.QPixmap("tileNew.png")
for tile in tiles:
    tile.setPixmap(pixmap)
Shiva420
User
Beiträge: 12
Registriert: Dienstag 16. Februar 2016, 01:42

Vielen Lieben Dank! :)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ergaenzend zu Sirius3: Wenn du solchen Code benutzt:

Code: Alles auswählen

self.tile1 = create_tile()
self.tile2 = create_tile()
....
self.tiles = [self.tile1, self.tile2]
dann machst du etwas falsch und solltest soetwas benutzen:

Code: Alles auswählen

self.tiles = [create_tile() for _ in range(25)]
Antworten