Mehrere Labels in Schleife ändern ?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
mepHy
User
Beiträge: 7
Registriert: Montag 5. Januar 2009, 12:49

for key in range(self.Anzahl):
for key2 in range(self.Anzahl):
if (int(self.GetItem(key2, 2).GetText()) == key):

self.LABELNAME.SetLabel(self.GetItem(key2, 1).GetText() +" "+ self.GetItem(key2, 0).GetText()[0]+"." )



Wie oben in meinem Quellcodebeispiel möchte ich mehrere Labels :
Label1
Label2
Label3
.....

in einer Schleife ändern.. wo derzeit LABELNAME steht.

habt ihr eine Idee wie das geht ?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Code: Alles auswählen

help(getattr)
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Benutze bitte die Code-Funktion, um den Code besser darzustellen.

Du könntest zB die Label-Objekte einer Liste hinzufügen und danach wieder über diese iterieren, um somit irgendwas damit zu machen. Da gibt es mehrere Möglichkeiten, je nach Einsatz...
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Code: Alles auswählen

for label in (self.label1, self.label2, self.label3):
    label.SetLabel(...)
MfG
HWK
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo mepHy,

willkommen im Forum.

bitte poste in Zukunft mit welche Komponenten du von wxPython verwendest.
Am besten wäre etwas Code von dem was du bis jetzt hast.

Du verwendest nach der Methode GetItem zu beurteilen ein wxListCtrl.

Da ich nicht den genauen Aufbau deines Fensters kenne würde ich folgendes vorschlagen:

Code: Alles auswählen

self.labels = []

#zum erstellen der labels
for i in range(self.anzahl):
    label = wx.StaticText(parent,id,  label)
    self.labels.append(label)
    

for key in range(self.anzahl):
    if self.GetItem(key,2).GetId == key:
        self.labels[key].SetLabel(self.GetItem(key2, 1).GetText() +" "+
                                  self.GetItem(key2, 0).GetText()[0]+".") 
Ich weiß nicht ob du von einer anderen Sprache kommst aber die Klammern bei der if Anweisung sind nicht nötig.

Grüße
Martin
mepHy
User
Beiträge: 7
Registriert: Montag 5. Januar 2009, 12:49

Ahso, vielen Dank schonmal aber ein Problem habe ich noch... unzwar wurden von mir per hand schon 32 Labels erzeugt.
folgendes funtioniert nicht :(

Labels wurden alle so erstellt..

Code: Alles auswählen

self.labels1 =  wx.StaticText (panel, -1, "Ihre auswahl" , (340, 110),(80,20), style = wx.ST_NO_AUTORESIZE)
self.labels2 =  wx.StaticText (panel, -1, "Ihre auswahl" , (420, 130),(80,20), style = wx.ST_NO_AUTORESIZE)
Wenn ich die Liste jetzt selber anlege, erkennt er das wohl nicht an...

Code: Alles auswählen

self.labelliste= [labels1,labels2,labels3,labels4,labels5,labels6,labels7,labels8,labels9,labels10,labels11,labels12,labels13,labels14,labels15,labels16,labels17,labels18,labels19,labels20,labels21,labels22,labels23,labels24,labels25,labels26,labels27,labels28,labels29,labels30,labels31,labels32]

for key in range(self.Anzahl):
            for key2 in range(self.Anzahl):
                if (int(self.GetItem(key2, 2).GetText()) == key):
                    self.labelliste[key].SetLabel(self.GetItem(key2, 1).GetText() +" "+ self.GetItem(key2, 0).GetText()[0]+"." )
mepHy
User
Beiträge: 7
Registriert: Montag 5. Januar 2009, 12:49

args, da mussja überall dieses self. hin :/ nun geht das =) dankööö
mepHy
User
Beiträge: 7
Registriert: Montag 5. Januar 2009, 12:49

Meine letzte Herrausforderung für heute ist es meine Liste (ListCtrl) mit Pickle abzuspeichern. Ich habe sie folgendermaßen erstellt..

Code: Alles auswählen

self.Liste = wx.ListCtrl.__init__(self,  panel, -1, (20,20), (240,400),
                                   style=wx.LC_REPORT
                                 | wx.BORDER_NONE)


Meine Idee war :

Code: Alles auswählen

def speichern(self,event):
        output = open('data.pkl', 'wb')
        pickle.dump(self.Liste, output)
        output.close()

        
    def laden(self,event):
        inputs = open('data.pkl', 'rb')
        self.Liste=pickle.load(inputs)
        inputs.close()
Was allerdings nicht funktioniert ... :( ich hoffe der Quellcode reicht, da ich schon weiter über 200 Zeilen bin und hiern icht alles Posten wollte ...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Eine Fehlermeldung hättest du schon auch mitposten können. Aber davon abgesehen wird es wohl mit so komplexen Objekten nicht gehen. Also wirst du zum Speichern wohl die Daten aus dem Widget auslesen müssen und zum Laden diese in das Widget reinladen müssen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mepHy
User
Beiträge: 7
Registriert: Montag 5. Januar 2009, 12:49

Es kommt keine Fehlermeldung. Aber die Datei in dem Verzeichniss wo er es reinspeichern soll ist leer, wurde aber erstellt.
Antworten