2010-10-28 35 views
0

嘿。我試圖禁用wxpython下的TextCtrl小部件中的上下文菜單(防止在右鍵單擊時出現上下文菜單)。如果我創建了我的菜單,並將其綁定到鼠標右鍵單擊它將始終顯示我的菜單,但如果我不創建菜單下的鼠標右鍵單擊事件它會自動創建一個標準的conext菜單,即使我不打電話event.Skip()(看示例代碼)。這是一個錯誤?有關圍繞此標準上下文菜單的任何想法?wxpython禁用TextCtrl中的上下文菜單

self.Bind(wx.EVT_RIGHT_DOWN, self.OnMouseRightDown) 

def OnMouseRightDown(self, event): 
    pt = event.GetPosition() 
    self.RightClickContext(event, pt, True) 

def RightClickContext(self, event, pt, enable): 

    menu = wx.Menu() 
    undo = menu.Append(ID_UNDO, 'Undo') 
    menu.AppendSeparator() 
    cut = menu.Append(ID_CUT, 'Cut') 
    copy = menu.Append(ID_COPY, 'Copy')   
    paste = menu.Append(ID_PASTE, 'Paste') 
    menu.AppendSeparator() 
    delete = menu.Append(ID_DELETE, 'Delete') 
    selectall = menu.Append(ID_SELECTALL, 'Select All') 
    undo.Enable(False) 
    cut.Enable(False) 
    copy.Enable(False) 
    if enable: 
     paste.Enable(True) 
    else: 
     paste.Enable(False) 
    delete.Enable(False) 
    selectall.Enable(False) 

    wx.EVT_MENU(menu, ID_PASTE, self.MenuPaste) 

    self.PopupMenu(menu, pt) 
    menu.Destroy() 
+1

請您發佈完全可運行的示例,如下所示:http://wiki.wxpython.org/MakingSampleApps – 2010-10-28 23:24:30

回答

2

試試這個(我對Python的2.7):

import wx 

class Test(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent, title='Test', size = (700,500)) 

     self.screen = wx.TextCtrl(self, wx.ID_ANY, style = wx.TE_MULTILINE) 
     self.screen.Bind(wx.EVT_CONTEXT_MENU, self.skip) 

     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.screen, 1, wx.GROW | wx.ALL) 
     self.SetSizer(self.sizer) 

    def skip(self, evt): 
     return 

app = wx.App(False) 
frame = Test(None) 
frame.Show() 
app.MainLoop() 

很難說沒有看到你的代碼的情況下,但它可能是因爲你沒有明確地返回,或還有一些其他事件也在處理中(如evt_right_up)