Seite 1 von 1

Wert in der ComboBox lässt sich nicht setzen

Verfasst: Freitag 1. Dezember 2006, 20:24
von JR
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

Re: Wert in der ComboBox lässt sich nicht setzen

Verfasst: Freitag 1. Dezember 2006, 21:28
von gerold
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
:-)

Verfasst: Freitag 1. Dezember 2006, 21:38
von JR
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

Verfasst: Donnerstag 7. Dezember 2006, 17:47
von JR
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

Verfasst: Donnerstag 7. Dezember 2006, 17:53
von Leonidas
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.

Verfasst: Donnerstag 7. Dezember 2006, 17:57
von JR
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

Verfasst: Donnerstag 7. Dezember 2006, 18:11
von Leonidas
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.

Verfasst: Donnerstag 7. Dezember 2006, 19:58
von gerold

Verfasst: Donnerstag 7. Dezember 2006, 20:14
von JR
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

Verfasst: Donnerstag 7. Dezember 2006, 20:46
von Leonidas
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 :)

Verfasst: Donnerstag 7. Dezember 2006, 20:50
von JR
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

Verfasst: Donnerstag 7. Dezember 2006, 20:59
von Leonidas
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.