【问题标题】:How to get object from right click event in wxribbon bar in wxpython?如何从 wxpython 的 wxribbon 栏中的右键单击事件中获取对象?
【发布时间】:2023-04-10 12:51:01
【问题描述】:

我正在构建一个 GUI,我正在为 wxpython 使用 wxribbon。我希望我的用户单击功能区栏上的任何选项卡并重命名它。问题是我无法通过右键单击功能区栏来获取对象(在这种情况下为选项卡)。我正在使用以下代码,但它不起作用。我无法获得右键单击的页面,我得到的是当前处于活动状态的页面。任何帮助都会很棒。谢谢!。示例代码如下:

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

【问题讨论】:

  • 请不要在标题中加上[已解决]。接受的答案足以表明问题已解决。

标签: python user-interface wxpython


【解决方案1】:
  • wx.GetMousePosition() 获取主屏幕上的位置。
  • HitTestTabs() 应使用功能区栏上的位置。

解决方法如下:

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)

【讨论】:

  • 非常感谢您的回答!它工作得很好。那太好了……我明白我错在哪里了。再次感谢....
猜你喜欢
  • 2013-09-19
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-26
  • 1970-01-01
  • 2011-05-13
相关资源
最近更新 更多