Elemente aus automatisch gefüllten Menu auslesen

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

Elemente aus automatisch gefüllten Menu auslesen

Beitragvon HarryPython » Freitag 11. Januar 2008, 15:28

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Elemente aus automatisch gefüllten Menu auslesen

Beitragvon gerold » Freitag 11. Januar 2008, 20:15

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

Beitragvon HarryPython » Samstag 12. Januar 2008, 18:58

: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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder