wxpython equivalent zu Tkinter(OptionMenu) gesucht

Plattformunabhängige GUIs mit wxWidgets.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Servus ich suche zu dem unten Tkinter ein equivalent unter wxPython Frame
bitte um hilfe
Danke

Code: Alles auswählen

self.optionMdax = tk.OptionMenu(self.auswahlframe, self.var_symbol,
                                        command=self.druck,
                                        *self.mdax)
        self.optionMdax.pack(side=tk.LEFT)
        self.buttons.append(self.optionMdax)
       
Ergebniss der Sitzung:

Code: Alles auswählen


import  wx

class Auswahl(wx.Frame):
    def __init__(self, parent = None, title = "AuswahlMenue",
                 size = wx.Size(500, 150)):
        wx.Frame.__init__(self, parent, -1, title, size = size)
        
        tecdax = ['MOR.DE','IDS.DE','GPC.DE','FNT.DE','ES6.DE','DRW3.DE',
                  'SWV.DE','TA6.DE','UTDI.DE','VTW.DE','WDI.DE']
        dax30=['ADS.DE','ALV.DE','BAS.DE','BAY.DE','BMW.DE','CBK.DE',
                 'SIE.DE','TKA.DE','TUI1.DE','VOW.DE','SAP.DE']
        mdax=['CLS1.DE','ALT.DE','AMB2.DE','AQU.DE','ARL.DE','ARO.DE',
                'WCH.DE','WIN.DE']
        cdax=['IUR.DE','PIT.DE','HUL.DE','SIM.DE','MNV6.DE','RIN7.DE',
                'DPW.DE','DPB.DE','DTE.DE']
        sdax=['AB1.DE','B5A.DE','AOX.DE','BAD.DE','BHS.DE','BYW6.DE','COM.DE',
              'SPR.DE','T3C.DE','TEG.DE','TTK.DE','VIA.DE','WAC.DE','WAS.DE',
              'ZIL2.DE']

        self.symbollisten = {'tecdax':tecdax, 'mdax':mdax,'cdax':cdax,'sdax':sdax,'dax30':dax30}
        
        wx.StaticText(self, -1, "Auswahl_Drop_down mit wxChoice.", (15, 10))
        self.wertx=10
    
        for key in self.symbollisten:
            wx.StaticText(self, -1, key, (self.wertx, 50), (40, -1))
            self.liste=self.symbollisten[key]
            self.liste = wx.Choice(self, -1, (self.wertx, 70),
                  choices = self.liste)
            self.Bind(wx.EVT_CHOICE, self.IhreWahl,self.liste)
            self.wertx=self.wertx+80
            
           
          
    def IhreWahl(self, event):
        print ('Ihre Auswahl: %s\n' % event.GetString())
        for key, liste in self.symbollisten.iteritems():
            if event.GetEventObject().GetStringSelection() in liste:
                print 'liste: '+key
                self.listenname=key
        dlg = wx.MessageDialog(self, ' Symbol: %s\n Liste : %s'%(event.GetString(),self.listenname),
                               'INFO Box IHRE Auswahl',
                               wx.OK | wx.ICON_INFORMATION
                               #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
                               )
        dlg.ShowModal()
        dlg.Destroy()

def main():
    """Testing"""
    app = wx.PySimpleApp()
    f = Auswahl()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
Zuletzt geändert von sea-live am Mittwoch 5. März 2008, 09:25, insgesamt 3-mal geändert.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Ehm, koenntest du ein lauffaehiges kleines Beispiel machen... oder schlicht einen Screenshot, auf dem man sieht, wie so ein OptionMenü aussieht und was es macht?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ist wx.Choice was Du suchst? Das OptionMenu in Tkinter sieht ja eher etwas "gewöhnungsbedürftig" aus. In wx kannst Du für eine Auswahl wx.Choice oder wx.ComboBox verwenden.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Danke für die Rückantwort

werde mich damit auseinandersetzen es gibt ja auch noch ne DEMO bei wx hatte ich ganz vergessen
Tkinter Button Auswahl menue wie gewünscht

Code: Alles auswählen


aktuell letzter beitrag
 
Zuletzt geändert von sea-live am Montag 3. März 2008, 15:43, insgesamt 1-mal geändert.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

hier war alles falsch letzter beitrag seite 2
Zuletzt geändert von sea-live am Montag 3. März 2008, 15:44, insgesamt 1-mal geändert.
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

ja, kann er

Code: Alles auswählen

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

Füge mal hinter Zeile 32 folgendes ein:

Code: Alles auswählen

print {self.td: 'Tecdax', self.da: 'DAX30'}[event.GetEventObject()]
MfG
HWK
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

ich Bekomme das einfach nicht in den Griff
wo liegt der Fehler in zeile 38
DANKE

Code: Alles auswählen


Lauffähiges programm im ersten Beitrag

Zuletzt geändert von sea-live am Montag 3. März 2008, 16:06, insgesamt 1-mal geändert.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Zeile 38:

Code: Alles auswählen

print event.GetEventObject().GetStringSelection()
Mawilo
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mit der GetEventObject Methode bekommst du das wx.Choice Objekt über das der Event ausgelöst wurde.

Übrigens: Diese Zuweisung von self.liste in der for Schleife ist nicht allzu sinnvoll, da du am ende lediglich das letzte erzeugte Objekt an den Namen gebunden hast.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Zap hat geschrieben:Mit der GetEventObject Methode bekommst du das wx.Choice Objekt über das der Event ausgelöst wurde.

Übrigens: Diese Zuweisung von self.liste in der for Schleife ist nicht allzu sinnvoll, da du am ende lediglich das letzte erzeugte Objekt an den Namen gebunden hast.
so läuft das nicht

was wenn ich dem objekt eine ID mitgebe
und die dann auslese
da bekomm ich aber nicht was ich da mit self.i reingeschrieben habe

Wo kann ich die Methoden die der eventhandler hat einsehen????
ich forsche da völlig im dunkelen rum.

Code: Alles auswählen

        for key in self.symbollisten:
            wx.StaticText(self, -1, key, (self.wertx, 50), (40, -1))
            self.liste=self.symbollisten[key]
            self.liste = wx.Choice(self, -1, (self.wertx, 70),
                  choices = self.liste)
            self.Bind(wx.EVT_CHOICE, self.IhreWahl,self.liste,id=self.i)
            self.wertx=self.wertx+80
            self.i=self.i+1
           
          
    def IhreWahl(self, event):
        print ('Ihre Auswahl: %s\n' % event.GetString())
        print event.GetId()        
   
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Du solltest schon die Beiträge lesen :wink:

Code: Alles auswählen

    def IhreWahl(self, event):
        print u'Ihre Auswahl: %s\n' % event.GetEventObject().GetStringSelection()
        dlg = wx.MessageDialog(self, 'Symbol: %s'%event.GetEventObject().GetStringSelection(),
                               'INFO Box IHRE Auswahl',
                               wx.OK | wx.ICON_INFORMATION)
Wenn ich das richtig verstanden habe, möchtest Du doch nur die gewählten Einträge ausgeben.

Mawilo
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

sea-live hat geschrieben:so läuft das nicht
Was läuft so nicht?!
sea-live hat geschrieben: was wenn ich dem objekt eine ID mitgebe
und die dann auslese
da bekomm ich aber nicht was ich da mit self.i reingeschrieben habe
Du kannst natürlich auch mit id's hantieren. Ich würde es so machen das ich die wx.Choice Objekte als Keys für das Dictionary nehmen würde, und als Values die Listen wie tecdax und Co.
Wenn du dann einen Event hast kommst du über GetEventObject an das Choice Objekt und kannst dieses Als Schlüssel für das Dictionary benutzen. Das sind aber alles nur spekulationen, aus dem was ich so daraus lese was du machen willst. Es geht bestimmt auch noch besser, aber dafür weiß ich zu wenig von deinem Vorhaben.
sea-live hat geschrieben:Wo kann ich die Methoden die der eventhandler hat einsehen????
ich forsche da völlig im dunkelen rum.
http://www.wxpython.org/docs/api/wx.Event-class.html
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

Mawilo hat geschrieben:Wenn ich das richtig verstanden habe, möchtest Du doch nur die gewählten Einträge ausgeben.
So wie ich das verstehe scheint er da noch mehr machen zu wollen. Warum sonst sowas?:

Code: Alles auswählen

        print self.symbollisten[event.GetEventObject()] 
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

@mawilo

HAB ich

Code: Alles auswählen

print event.GetEventObject().GetStringSelection()
das liefert nur den gewählten listen eintrag nicht den Listennamen
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Zap hat geschrieben:
Mawilo hat geschrieben:Wenn ich das richtig verstanden habe, möchtest Du doch nur die gewählten Einträge ausgeben.
So wie ich das verstehe scheint er da noch mehr machen zu wollen. Warum sonst sowas?:

Code: Alles auswählen

        print self.symbollisten[event.GetEventObject()] 
DAS bringt ein Error

ich brauch den Listennamen damit ich dann in dem verzeichniss=listenname
die datei=listeneintrag öffnen kann

Danke Für die Diskusions hilfe

IST DIE ID IMMER GLEICH ich bekomme da -204 für TECDAX

mal die ganze pracht an code

Code: Alles auswählen


import  wx

class Auswahl(wx.Frame):
    def __init__(self, parent = None, title = "AuswahlMenue",
                 size = wx.Size(500, 150)):
        wx.Frame.__init__(self, parent, -1, title, size = size)
        
        tecdax = ['MOR.DE','IDS.DE','GPC.DE','FNT.DE','ES6.DE','DRW3.DE',
                  'SWV.DE','TA6.DE','UTDI.DE','VTW.DE','WDI.DE']
        dax30=['ADS.DE','ALV.DE','BAS.DE','BAY.DE','BMW.DE','CBK.DE',
                 'SIE.DE','TKA.DE','TUI1.DE','VOW.DE','SAP.DE']
        mdax=['CLS1.DE','ALT.DE','AMB2.DE','AQU.DE','ARL.DE','ARO.DE',
                'WCH.DE','WIN.DE']
        cdax=['IUR.DE','PIT.DE','HUL.DE','SIM.DE','MNV6.DE','RIN7.DE',
                'DPW.DE','DPB.DE','DTE.DE']
        sdax=['AB1.DE','B5A.DE','AOX.DE','BAD.DE','BHS.DE','BYW6.DE','COM.DE',
              'SPR.DE','T3C.DE','TEG.DE','TTK.DE','VIA.DE','WAC.DE','WAS.DE',
              'ZIL2.DE']

        self.symbollisten = {'tecdax':tecdax, 'mdax':mdax,'cdax':cdax,'sdax':sdax,'dax30':dax30}
        wx.StaticText(self, -1, "Auswahl_Drop_down mit wxChoice.", (15, 10))
        self.wertx=10
        self.i=0
        for key in self.symbollisten:
            wx.StaticText(self, -1, key, (self.wertx, 50), (40, -1))
            self.liste=self.symbollisten[key]
            self.liste = wx.Choice(self, -1, (self.wertx, 70),
                  choices = self.liste)
            self.Bind(wx.EVT_CHOICE, self.IhreWahl,self.liste,id=self.i)
            self.wertx=self.wertx+80
            self.i=self.i+1
           
          
    def IhreWahl(self, event):
        print ('Ihre Auswahl: %s\n' % event.GetString())
        print event.GetId()
        #print self.symbollisten[event.GetEventObject()]
        dlg = wx.MessageDialog(self, 'Symbol: %s'%event.GetString(),
                               'INFO Box IHRE Auswahl',
                               wx.OK | wx.ICON_INFORMATION
                               #wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_INFORMATION
                               )
        dlg.ShowModal()
        dlg.Destroy()

def main():
    """Testing"""
    app = wx.PySimpleApp()
    f = Auswahl()
    f.Center()
    f.Show()
    app.MainLoop()


if __name__ == "__main__":
    main()
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

na dann hier der Listenname:

Code: Alles auswählen

    def IhreWahl(self, event):
        print u'Ihre Auswahl: %s' % event.GetEventObject().GetStringSelection()
        for key, liste in self.symbollisten.iteritems():
            if event.GetEventObject().GetStringSelection() in liste:
                print key

Mawilo
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Mawilo hat geschrieben:na dann hier der Listenname:

Code: Alles auswählen

    def IhreWahl(self, event):
        print u'Ihre Auswahl: %s' % event.GetEventObject().GetStringSelection()
        for key, liste in self.symbollisten.iteritems():
            if event.GetEventObject().GetStringSelection() in liste:
                print key

Mawilo
DAS WARS DANKE

somit hier erledigt
ich werde den ersten Beitrag dann editieren


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

sea-live hat geschrieben:ich werde den ersten Beitrag dann editieren
Brauchst du nicht, sowas wird hier sowieso nicht sonderlich gerne gesehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Leonidas hat geschrieben:
sea-live hat geschrieben:ich werde den ersten Beitrag dann editieren
Brauchst du nicht, sowas wird hier sowieso nicht sonderlich gerne gesehen.
Weil dann nämlich manche der nachfolgenden Beiträge (wie meiner) ad absurdum geführt werden.
MfG
HWK
Antworten