ComboBox.GetValue liefert alten Wert

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Freitag 25. August 2006, 12:56

Hi, ich habe eine ComboBox in meinem Frame, und daran ein Event gebunden.

Code: Alles auswählen

        self.cmbProjekt = wx.ComboBox(self.Panel, -1, choices=self.Projekte)
        self.Bind(wx.EVT_TEXT, self.OncmbProjekt, self.cmbProjekt)
Wenn ich jetzt in OncmbProjekt GetStringSelection benutze liefert er mir den aktuell selektierten Wert, nicht das was aktuell in der ComboBox steht. Ist auch logisch.

Nach einem Blick in die wxWidget-Hilfe hab ich dann GetValue genommen, aber das liefert nur den richtigen Wert, wenn man etwas eingetippt hat. Wenn man etwas aus der Liste selektiert hat, wird nicht der aktuelle, sondern der letzte Wert zurückgegeben. Ich muss also immer zweimal auswählen, damit ich den gewünschten Wert zurückbekomme.

Code: Alles auswählen

    def OncmbProjekt(self, event):        
        Projekt = self.cmbProjekt.GetValue()
Wenn die ComboBox leer ist und ich dann Element1 selektiere, wird nichts zurückgegeben. Selektiere ich anschließend Element3, wird Element1 zurückgegeben, beim nächsten selektieren von irgendwas dann Element3 usw..

Was mache ich hier falsch? Wenn ich abc eingebe, wird doch auch sofort abc zurückgegeben :?
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Freitag 25. August 2006, 13:15

Bin gerade etwas im Stress und habe nur kurz
einen Blick auf die Demo geworfen.
Dort wird nirgends GetValue() verwendet sondern
GetString() . Funktioniert es damit nicht?
Gucke später nochmal rein ^^
Gruss
Nirven
User
Beiträge: 130
Registriert: Mittwoch 10. Mai 2006, 08:18
Wohnort: Bremerhaven

Freitag 25. August 2006, 13:32

Ts, mein halbes Programm hab ich aus den Demos zusammen geklaut, aber hier komm ich nicht dadrauf da rein zu gucken... ja, event.GetString() funktioniert. Leider hat die Funktion ein problem mit Umlauten... ich werde wohl mehrere Funktionen erstellen müssen, einmal für EVT_TEXT und einmal für EVT_COMBOBOX, oder so. Naja.

Edit: Sofunktioniert es jetzt

Code: Alles auswählen

self.cmbProjekt = wx.ComboBox(self.Panel, -1, choices=self.Projekte)
self.Bind(wx.EVT_COMBOBOX, self.OncmbProjektSel, self.cmbProjekt)
self.Bind(wx.EVT_TEXT, self.OncmbProjekt, self.cmbProjekt)

...

def OncmbProjektSel(self, event):        
    self.cmbProjekt.SetValue(self.cmbProjekt.GetStringSelection())
            
def OncmbProjekt(self, event):        
    Projekt = self.cmbProjekt.GetValue()
Hätte ja erwartet das die ComboBox das von alleine macht.

Edit2: event.GetString() hätte es genauso getan, das Umlaute nicht funktionieren liegt an einem benutzten Modul. Ist mir nur noch nie aufgefallen :oops:
Antworten