Python wxTreeCtrl上的关联菜单
我正在尝试在TreeCtrl上创建上下文菜单。下面是一个简化的示例程序:Python wxTreeCtrl上的关联菜单,python,wxpython,Python,Wxpython,我正在尝试在TreeCtrl上创建上下文菜单。下面是一个简化的示例程序: import wx class ContextMenu(object): def __init__(self): super(ContextMenu, self).__init__() self._menu = None self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu) def OnContextMenu
import wx
class ContextMenu(object):
def __init__(self):
super(ContextMenu, self).__init__()
self._menu = None
self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
def OnContextMenu(self, event):
if self._menu is not None:
self._menu.Destroy()
self._menu = wx.Menu()
self.CreateContextMenu(self._menu)
self.PopupMenu(self._menu)
def CreateContextMenu(self, menu):
raise NotImplementedError
class MyList(wx.TreeCtrl, ContextMenu):
def __init__(self, parent, *args, **kwargs):
super(MyList, self).__init__(parent, style=wx.TR_DEFAULT_STYLE|wx.TR_HIDE_ROOT)
ContextMenu.__init__(self)
self.root = self.AddRoot('')
self.SetItemHasChildren(self.root, True)
self.node1 = self.AppendItem(self.root, 'Node 1')
self.node2 = self.AppendItem(self.root, 'Node 2')
self.SetItemHasChildren(self.node2, True)
self.node3 = self.AppendItem(self.node2, 'Node 3')
def CreateContextMenu(self, menu):
self._menu.Append(wx.ID_ADD)
self._menu.Append(wx.ID_DELETE)
self._menu.Append(wx.ID_EDIT)
class MainFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super(MainFrame, self).__init__(*args, **kwargs)
self.panel = wx.Panel(self)
self.tree = MyList(self.panel)
self.text = wx.TextCtrl(self.panel)
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.tree, 1, wx.EXPAND)
sizer.Add(self.text, 2, wx.EXPAND)
self.panel.SetSizer(sizer)
self.panel.Fit()
self.SetInitialSize()
class App(wx.App):
def __init__(self):
super(App, self).__init__()
MainFrame(None, title='Test').Show()
App().MainLoop()
我的问题是,现在上下文菜单只在我右键单击树中的项目时出现,而不是在项目周围的空白区域中单击时出现。基本上,我希望能够通过在树的空白处单击鼠标右键来右键单击隐藏的根节点。我该怎么办
编辑:我尝试为
EVT\u TREE\u ITEM\u RIGHT\u CLICK
添加一个处理程序,但这也不起作用(仅当单击树中的项时),并且还阻止了上下文菜单。他们发布了Python 3的wxpython吗?我问这个问题是因为我不记得对Python2+使用super()。它们是否允许在Python2+中重写super()?只是出于好奇,我自己从来没有试过。@Jack_of_All_Trades我认为在python 2+中允许使用super(),因为它适合我。快速搜索告诉我它是在2.2中添加的,只适用于新样式classes@Jack_of_All_Trades:super
是在Python 2.2中引入的。