wxpython 禁用 TextCtrl 上下文菜单
你好。我正在尝试在wxpython的TextCtrl控件中禁用右键菜单,也就是当我右键点击时不想让菜单弹出来。如果我自己创建一个菜单并把它绑定到右键点击事件上,它就会总是显示我自己的菜单。但是如果我不在右键点击事件中创建菜单,它就会自动生成一个标准的右键菜单,即使我没有调用event.Skip()(请看示例代码)。这是个bug吗?有没有办法解决这个标准右键菜单的问题?
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 个回答
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。