Seite 1 von 2

wxpython equivalent zu Tkinter(OptionMenu) gesucht

Verfasst: Sonntag 2. März 2008, 17:39
von sea-live
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()

Verfasst: Sonntag 2. März 2008, 21:48
von nkoehring
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?

Verfasst: Montag 3. März 2008, 07:05
von Mawilo
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.

Verfasst: Montag 3. März 2008, 12:31
von sea-live
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
 

Verfasst: Montag 3. März 2008, 13:29
von sea-live
hier war alles falsch letzter beitrag seite 2

Verfasst: Montag 3. März 2008, 13:50
von Zap
ja, kann er

Code: Alles auswählen

event.GetEventObject()

Verfasst: Montag 3. März 2008, 14:03
von HWK
Füge mal hinter Zeile 32 folgendes ein:

Code: Alles auswählen

print {self.td: 'Tecdax', self.da: 'DAX30'}[event.GetEventObject()]
MfG
HWK

Verfasst: Montag 3. März 2008, 14:43
von sea-live
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


Verfasst: Montag 3. März 2008, 14:51
von Mawilo
Zeile 38:

Code: Alles auswählen

print event.GetEventObject().GetStringSelection()
Mawilo

Verfasst: Montag 3. März 2008, 14:54
von Zap
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.

Verfasst: Montag 3. März 2008, 15:08
von sea-live
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()        
   

Verfasst: Montag 3. März 2008, 15:20
von Mawilo
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

Verfasst: Montag 3. März 2008, 15:24
von Zap
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

Verfasst: Montag 3. März 2008, 15:28
von Zap
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()] 

Verfasst: Montag 3. März 2008, 15:36
von sea-live
@mawilo

HAB ich

Code: Alles auswählen

print event.GetEventObject().GetStringSelection()
das liefert nur den gewählten listen eintrag nicht den Listennamen

Verfasst: Montag 3. März 2008, 15:42
von sea-live
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()

Verfasst: Montag 3. März 2008, 15:45
von Mawilo
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

Verfasst: Montag 3. März 2008, 15:54
von sea-live
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


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Verfasst: Montag 3. März 2008, 17:58
von Leonidas
sea-live hat geschrieben:ich werde den ersten Beitrag dann editieren
Brauchst du nicht, sowas wird hier sowieso nicht sonderlich gerne gesehen.

Verfasst: Dienstag 4. März 2008, 21:10
von HWK
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