Elemente aus automatisch gefüllten Menu auslesen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Hi.

Ich habe ein rechte Maustaste Menü erstellt. Dieses wird, wenn ich auf einen Button drücke, automatisch mit Namen gefüllt. Nun möchte ich, dass wenn ich einen Namen auswähle, dieser in eine Funktion übergeben wird.

Ich fülle das Menü wie folgt:

Code: Alles auswählen

self.menu = wx.menu

i = 1
for text in f.readlines():
     self.menu.Append(i, text, "", wx.ITEM_NORMAL)
     self.Bind(wx.EVT_MENU, self.Meine_Funktion, id=i)
     i=i+1


def Meine_Funktion(self, id):
     print id 
folgendes gibt der print Befehl aus:
<wx._core.CommandEvent; proxy of <Swig Object of type 'wxCommandEvent *' at 0x21e264> >

Hab mit dir(id) schon alles durchsucht und bekomme leider nichts zurück, was auf einen meiner hinzugefügten Namen schließen lässt.

Wie bekomme ich also einen ausgewählten Namen zurück???


Danke
HP
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo HarryPython!

Wenn ein EventHandler aufgerufen wird, dann wird nicht die ID, sondern das Event übergeben.

Code: Alles auswählen

def meine_funktion(self, event):
     print dir(event)
Mit ``GetEventObject()`` bekommst du eine direkte Referenz zum Menüeintrag zurück. Mit diesem Menüeintrag kannst du einmal ``dir`` aufrufen und du hast rausgefunden, ob es dort so etwas wie ``GetLabel`` (oder Ähnliches) gibt. Nein, das weiß ich jetzt nicht auswendig. :-)

Wahrscheinlich bekomst du ein wxMenuItem zurück. Hilfe zu diesem Objekttyp findest du hier: http://wxwidgets.org/manuals/stable/wx_wxmenuitem.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

:oops: Na klar. Da war ich mit dem Posten mal wieder schneller als mit dem Denken. Ich danke dir!

Hier nun die Lösung:

Code: Alles auswählen

i = 1
for text in f.readlines():
     self.menu.Append(i, text, "", wx.ITEM_NORMAL)
     self.Bind(wx.EVT_MENU, self.Meine_Funktion, id=i)
     i=i+1


def Meine_Funktion(self, event):
     meine_id = event.GetId()
     mein_objekt = event.GetEventObject()
     mein_name = mein_objekt.GetLabel(meine_id)
Gruß
HP
Antworten