wie wx.StaticText aktualisieren?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
m3t3or
User
Beiträge: 18
Registriert: Donnerstag 16. Februar 2006, 11:21

Hallo,

der Text von label_mo, label_di, etc. soll aktualisiert werden, wenn etwas in einer Combobox selektiert wird. Ich komme aber einfach nicht drauf, wie die Labels angesprochen werden. Normalerweise so label_mo.SetLabel("text"), oder?


Vielen Dank für die Aufmerksamkeit 8)

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
tage = ['mo','di','mi','do','fr','sa','so']
tageszeit = ['v','m','n']
einheiten=['Bitte wählen',
               'trainingsspiel',
               'spielintelligenz',
               'pressing',
               'passspiel',
               'konterspiel',
               'flexibilitaet',
               'abseitsfalle',
               'kopfball',
               'flanken',
               'schussgenauigkeit',
               'zweikampf',
               'tackling',
               'fuenf_gegen_zwei',
               'schusskraft',
               'alleingaenge',
               'technik',
               'gymnastik',
               'radfahren',
               'schnelligkeit',
               'kraftraum',
               'schwimmen',
               'waldlauf',
               'kondition',
               'zirkeltraining',
               'leichte_ausdauer',
               'taktikschulung',
               'straftraining',
               'torwarttraining',
               'elfmeter',
               'freistoesse',
               'ecken',
               'standards',
               'frische',
               'frei',
               'fussballtennis'
               ]

class ateMainFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, (-1, -1),(900,300))
        self.mainpanel = ateMainPanel(self,-1)
        self.CreateStatusBar()
        self.GetStatusBar().SetFieldsCount(2)

class ateChoices(wx.ComboBox):
    def __init__(self,parent,id,value,size,pos,choices,style):
        wx.ComboBox.__init__(self,parent,id,value,size,pos,choices,style)

        self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, self)
    def EvtComboBox(self,event):

        print event.GetString() + " selected"
        #print "GetClientData() :" + str(event.GetClientData())
        #print "GetClientObject() :" + str(event.GetClientObject())
        #print "GetExtraLong() :" + str(event.GetExtraLong())
        #print "GetInt() :" + str(event.GetInt())
        #print "GetSelection() :" + str(event.GetSelection())
        print "Name "+ str(self.GetName())
        print "GetString() :" + str(event.GetString())


class ateMainPanel(wx.Panel):
    def __init__(self,parent,id):
        wx.Panel.__init__(self,parent,id,(-1,-1))
        vbox = wx.BoxSizer(wx.VERTICAL)
        for zeit in tageszeit:
            hbox = wx.BoxSizer(wx.HORIZONTAL)
            for tag in tage :
                cb = ateChoices(self,-1,"Bitte Wählen",(-1,-1),(-1,-1),einheiten,wx.CB_READONLY)
                #print cb.GetName()
                cb.SetName("cb_"+tag+"_"+zeit)
                #cb.Bind(wx.EVT_COMBOBOX, cb.EvtComboBox, cb)
                #print cb.GetName()
                hbox.Add(cb,0)

            vbox.Add(hbox)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        for tag in tage:
            label = wx.StaticText(self,-1)
            box = wx.StaticBox(self, -1, tag)
            bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
            label.SetName("label_"+tag)
            box.SetName("box_"+tag)
            bsizer.Add(label, 0, wx.TOP|wx.LEFT, 10)
            #print box.GetName()
            #print label.GetName()
            #print label.GetParent()
            hbox1.Add(bsizer,0)


        vbox.Add(hbox1)
        self.SetSizer(vbox)

class ATE (wx.App):
     def OnInit(self):
        frame = ateMainFrame(None, -1, 'Titel')
        frame.Show(True)
        return True

if __name__ == '__main__':
    app = ATE(0)
    app.MainLoop()


Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Prinzipiell stimmt das. label_mo etc. sind aber keine Window-Objekte, sondern Strings. Du mußt erst das Objekt zum Namen finden, also:

Code: Alles auswählen

 FindWindowByName('label_mo').SetLabel('Neuer Text')
MfG
HWK
m3t3or
User
Beiträge: 18
Registriert: Donnerstag 16. Februar 2006, 11:21

Danke HWK,

das funktioniert.
Antworten