2014-01-29 44 views
0

我正在構建一個GUI,我正在使用wxribbon進行wxpython。我希望我的用戶單擊功能區欄上的任何選項卡並重命名它。問題是我無法通過右鍵單擊功能區欄來獲取對象(在這種情況下是選項卡)。我正在使用下面的代碼,但它不工作。我無法獲得右鍵點擊的頁面,我得到的是當前活動的頁面。任何幫助都會很棒。謝謝!。示例代碼如下:如何從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 
+0

請不要把在標題[解決]。接受的答案足以說明問題已解決。 – Fenikso

回答

0
  • 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) 
+0

非常感謝您的回答!它工作得很好。那太棒了......我明白我錯在哪裏。再次感謝.... – Samyak

相關問題