python: haga clic derecho en el menú de la lista que no muestra el elemento seleccionado

En mi esfuerzo continuo por aprender más sobre Python, estoy tratando de agregar un evento de clic derecho a mi progtwig de administrador de mp3. Lo que funciona actualmente es que muestra el menú y todas las opciones. Lo que no funciona es que las funciones seleccionadas del menú no se ejecutan como creo que deberían ser. Gran parte de este código fue tomado de un ‘cómo’ en otro sitio.

Aquí están las opciones de menú de clic derecho

menu_titles = ["Remove Selection from list", "Delete Selection from system", "Move Selection", "Copy Selection", "Print Selection"] menu_title_by_id = {} for title in menu_titles: menu_title_by_id[ wxNewId() ] = title 

El código que se ejecuta cuando ocurre el evento de clic derecho

 def RightClickCb( self, event ): # record what was clicked self.list_item_clicked = right_click_context = event.GetText() ### 2. Launcher creates wxMenu. ### menu = wxMenu() for (id,title) in menu_title_by_id.items(): ### 3. Launcher packs menu with Append. ### menu.Append( id, title ) ### 4. Launcher registers menu handlers with EVT_MENU, on the menu. ### EVT_MENU( menu, id, self.MenuSelectionCb ) ### 5. Launcher displays menu with call to PopupMenu, invoked on the source component, passing event's GetPoint. ### self.MainPanel.PopupMenu( menu, event.GetPoint() ) menu.Destroy() # destroy to avoid mem leak def MenuSelectionCb( self, event ): # do something operation = menu_title_by_id[ event.GetId() ] target = self.list_item_clicked print 'Perform "%(operation)s" on "%(target)s."' % vars() 

Lo que espero obtener cuando hago un clic derecho y luego selecciono una de las opciones en el menú es la salida

 Perform "Print Selection" on "" 

Lo que estoy consiguiendo es

 Perform "Print Selection" on "." 

¿Cómo obtengo los datos del elemento que he seleccionado como parte de mi evento de clic derecho?

Tal vez debería usar event.GetString() en lugar de event.GetText()

Ver aqui

Tu código parece estar desactualizado, aunque la vinculación a eventos se debe hacer así:

 menu.Bind(wx.EVT_MENU, self.MenuSelectionCb, id=id) 

además, si vincula todos los identificadores a la misma función, solo puede vincularlos una vez para todos los identificadores:

 menu.Bind(wx.EVT_MENU, self.MenuSelectionCb) 

Puede encontrar una solución en Python: haga clic con el botón derecho en objectlistview que no muestra el nombre del elemento seleccionado donde se propone el uso del método GetSelectedObject() de GetSelectedObject() .