Wert in der ComboBox lässt sich nicht setzen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hallo!

Ich habe hier im Forum nicht gefunden, dass jemand dasselbe Problem hat.
Wenn ich eine ComboBox (siehe Beispiel unten) habe, welche
die "Choices"
'Mustermann' und 'Musterfrau' enthält, dann kann ich mit dem Initialparameter value='Muster' und auch nachträglich mit SetValue('Muster') nur dann den Wert setzen, wenn kein Item der Choices mit value beginnt!!

Sprich ich kann den Wert 'Test' setzen, aber nicht 'Muster'
Weiß jemand, wie ich dieses Verhalten weg bekomme?

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
# File: test.py
import wx
#------------------------------------------------------------------------         
class MyFrame(wx.Dialog):
    def __init__(self, parent, title):
        wx.Dialog.__init__(self, parent, -1, title,
                          pos=(150, 150), size=(300, 350))

        panel = wx.Panel(self, -1)
       
        obj1 = wx.ComboBox(parent=panel, size=(200, wx.DefaultSize.height), 
                                    choices=['Mustermann', 'Musterfrau'],
                                    value='Test', 
                                    style=wx.CB_DROPDOWN)

        obj2 = wx.ComboBox(parent=panel, size=(200, wx.DefaultSize.height), 
                                    choices=['Mustermann', 'Musterfrau'],
                                    value='Muster', 
                                    style=wx.CB_DROPDOWN)
        
        main_sizer = wx.BoxSizer(wx.VERTICAL)
        main_sizer.Add(obj1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 15)
        main_sizer.Add(obj2, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 15)

        panel.SetSizer(main_sizer)
        main_sizer.Fit(self)
        
        self.main_sizer = main_sizer
    #------------------------------------------------------------------------     

#------------------------------------------------------------------------ 
class MyApp(wx.App):
    def OnInit(self):
        dialog = MyFrame(None, 'Titel')
        if dialog.ShowModal() == wx.ID_OK:
            print dialog.object.GetDate() 
        return True
        
app = MyApp(0)
app.MainLoop()
Über eine Antwort würde ich mich sehr freuen!
Liebe Grüße
Jamil
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

JR hat geschrieben:Weiß jemand, wie ich dieses Verhalten weg bekomme?
Hi Jamil!

Ich habe ein paar Varianten durchprobiert und nichts gefunden. Du wirst wohl oder übel den gewünschten Wert auch in die ``choices`` mit hinein tun müssen. :? Dann solltest du den Wert auch nicht mit ``SetValue()`` sondern mit ``SetSelection()`` auswählen, da ich gemerkt habe, dass der ``value`` verschwindet, wenn man die Combobox aufklappt und dann wieder schließt, ohne vorher auf einen Wert zu klicken.

Das scheint wirklich etwas zu sein, was man als möglichen Bug oder Feature-Request an die Entwickler von wxPython weiterleiten sollte. Natürlich sollte man vorher noch in der wxPython-Mailingliste nachfragen.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi Gerold!

Vielen Dank für deine Reaktion. Ich habe an 'wxpython-users@lists.wxwidgets.org' geschrieben und bin gespannt, was für eine Antwort es gibt.
Die Antwort stelle ich natürlich dann hierein.

Bis denn
Jamil
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi!

Vor sechs Tagen habe ich mich an die Mailinglist von wxPython.org gewandt (http://aspn.activestate.com/ASPN/Mail/M ... rs/3353114), bekomme aber keine Antwort.

Hat jemand Erfahrung mit der Mailinglist gemacht? Muss man da geduldig sein?

Grüße
Jamil
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

JR hat geschrieben:Hat jemand Erfahrung mit der Mailinglist gemacht? Muss man da geduldig sein?
Normalerweise gibt es dort sehr schnell antworten - oft hat der Hauptentwickler meine eigenen Fragen beantwortet. Wenn da wirklich nichts komt, dann schriebst du am besten eine neue Mail (aber bitte neu formulieren).

P.S.: Liegt vielleicht auch an dem nichtssagenden Subject, so dass sich niemand die durchgelesen hat: Verwende aussagekräftige, genaue Betreffzeilen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi Leonidas!

Weswegen neu formulieren? Besser kann ich das nicht und es beschreibt mein Problem so, wie mein Englisch es hergibt...
Ansonsten finde ich diese Seite http://aspn.activestate.com/ASPN/Mail/M ... rs/3353114 total iritierend. Da gibt es keinen "Reply"-Button o.ä.
Vielleicht muss ich auch zum Augenarzt?

Gruß
Jamil
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

JR hat geschrieben:Weswegen neu formulieren?
Weil es sonst nicht wie "Ich brauche unbedingt eine Antwort und spamme deswegen die Mailingliste voll!!11elf" rüberkommt.
JR hat geschrieben:Ansonsten finde ich diese Seite http://aspn.activestate.com/ASPN/Mail/M ... rs/3353114 total iritierend. Da gibt es keinen "Reply"-Button o.ä.
Vielleicht muss ich auch zum Augenarzt?
Nö - keine Sorge.8) Das ist ja nur das Archiv der Mailingliste. Antworten tut man ja per Mail.. heißt ja nicht umsonst Mailingliste.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Ui!

Also die Mailingliste ist gewöhnungsbedürftig, wenn es darum geht, etwas zu finden.

Die funktionierende Lösung (Dank Robin Dunn's Antwort unter http://lists.wxwidgets.org/cgi-bin/ezml ... mecnakmeob und indirekt durch Gerold) lautet:

Hierbei ist Zeile 23 entscheidend und als Änderung hinzugekommen!

Code: Alles auswählen

# -*- coding: iso-8859-1 -*- 
# File: combobox.py 
import wx 
#------------------------------------------------------------------------          
class MyFrame(wx.Dialog): 
    def __init__(self, parent, title): 
        wx.Dialog.__init__(self, parent, -1, title, 
                          pos=(150, 150), size=(300, 350)) 

        panel = wx.Panel(self, -1) 
        
        obj1 = wx.ComboBox(parent=panel, size=(200, wx.DefaultSize.height), 
                                    choices=['Mustermann', 'Musterfrau'], 
                                    value='Test', 
                                    style=wx.CB_DROPDOWN) 

        obj2 = wx.ComboBox(parent=panel, size=(200, wx.DefaultSize.height), 
                                    choices=['Mustermann', 'Musterfrau'], 
                                    value='Muster', 
                                    style=wx.CB_DROPDOWN)
        
        wx.CallAfter(obj2.SetValue, 'Muster') 
        
        main_sizer = wx.BoxSizer(wx.VERTICAL) 
        main_sizer.Add(obj1, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 15) 
        main_sizer.Add(obj2, 1, wx.ALL|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 15) 

        panel.SetSizer(main_sizer) 
        main_sizer.Fit(self) 
        
        self.main_sizer = main_sizer 
    #------------------------------------------------------------------------      

#------------------------------------------------------------------------ 
class MyApp(wx.App): 
    def OnInit(self): 
        dialog = MyFrame(None, 'Titel') 
        if dialog.ShowModal() == wx.ID_OK: 
            print dialog.object.GetDate() 
        return True 
        
app = MyApp(0) 
app.MainLoop()
Bis denn
Jamil
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

JR hat geschrieben:Also die Mailingliste ist gewöhnungsbedürftig, wenn es darum geht, etwas zu finden.
Eigentlich nicht. Wenn man sich einträgt, bekommt man die Mails sogar zugestellt :)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi!

Bekommt man dann jede Antwort zu jedem etc. zugestellt oder nur Antworten auf eigene Einträge, wie ich es von hier gewohnt bin?

Grüße dich Leonidas
Jamil
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

JR hat geschrieben:Bekommt man dann jede Antwort zu jedem etc. zugestellt oder nur Antworten auf eigene Einträge, wie ich es von hier gewohnt bin?
Du musst dir eine Mailingliste wie einen Mailverteiler vorstellen, jeder der eingetragen ist, bekommt jede Mail.

Allerdings kannst du auch einen Usenet-Client nutzen und die Mailingliste wi eine normale Newsgroup nutzen, die findest du im Usenet als gmane.comp.python.wxpython.

Zum weiterlesen: Mailingliste, Gmane.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten