简体   繁体   中英

How to get object from right click event in wxribbon bar in wxpython?

I am building a GUI and I am using wxribbon for wxpython. I want my user to click on any tab on ribbon bar and rename it. The problem is that I am not able to get the object(tab in this case) from right click on ribbon bar. I am using the following code but it is not working. I am not able to get the page which is right clicked, what I get is the page that is currently active. Any help would be great. Thanks!. The sample code is as follows :

self.Bind(RB.EVT_RIBBONBAR_TAB_RIGHT_DOWN, self.RightClickRibbonTabs, id = wx.ID_ANY )

def RightClickRibbonTabs(self,event):
    index, tab = self._ribbon.HitTestTabs(wx.GetMousePosition())
    page = self._ribbon._pages[index].page
    pos = wx.GetMousePosition()
    x, y = pos.x, pos.y
    self.popupmenu = wx.Menu()
    RenameTab = self.popupmenu.Append(-1, "Rename Tab")
    self.Bind(wx.EVT_MENU, lambda event : self.RenameTab(event, x, y, page), RenameTab)
    pos = wx.GetMousePosition()
    x, y = pos.x, pos.y
    pos = self.ScreenToClient(pos)
    self.PopupMenu(self.popupmenu, pos)

def RenameTab(self, event, x, y, page):
    text = wx.TextEntryDialog(None, "Rename Tab :", "Rename Tab", page.GetLabel())
    text.CenterOnParent()
    answer = text.ShowModal()
    text.Destroy()
    if answer == wx.ID_OK:
        newname = text.GetValue()
        page.SetLabel(newname)
        self._ribbon.Realize()
    else:
        pass
  • wx.GetMousePosition() get the positon on the main screen.
  • HitTestTabs() should use the position on the ribbon bar.

Here is the solution:

def RightClickRibbonTabs(self,event):
    pos = self.ScreenToClient(wx.GetMousePosition())
    index, tab = self._ribbon.HitTestTabs(pos)
    page = self._ribbon._pages[index].page
    pos = wx.GetMousePosition()
    x, y = pos.x, pos.y
    self.popupmenu = wx.Menu()
    RenameTab = self.popupmenu.Append(-1, "Rename Tab")
    self.Bind(wx.EVT_MENU, lambda event : self.RenameTab(event, x, y, page), RenameTab)
    pos = wx.GetMousePosition()
    x, y = pos.x, pos.y
    pos = self.ScreenToClient(pos)
    self.PopupMenu(self.popupmenu, pos)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM