2010-10-28 7 views
0

Hey. J'essaie de désactiver le menu contextuel dans un widget TextCtrl sous wxpython (empêcher le menu contextuel d'apparaître quand on clique à droite). Si je crée mon menu et le lie au clic droit de la souris, il affichera toujours mon menu mais si je ne crée pas le menu sous un clic droit, il créera automatiquement un menu contextuel, même si je n'appelle pas event.Skip() (voir l'exemple de code). Est-ce un bug? Des idées pour contourner ce menu contextuel standard?wxpython désactiver le menu contextuel dans 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

pouvez-vous poster un échantillon entièrement exécutable s'il vous plaît, comme indiqué: http: //wiki.wxpython.org/MakingSampleApps –

Répondre

2

Essayez ceci (je suis sur 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() 

Difficile à dire sans voir le contexte de votre code, mais il se pourrait que vous ne retournez pas explicitement, ou il y a un autre événement qui est également en cours de traitement (comme evt_right_up)