来自鼠标事件的WxPython ToolBar Tool参考

时间:2018-01-27 20:40:46

标签: wxpython toolbar

我的应用程序动态创建工具栏工具,因此只有一个鼠标事件处理程序分配给用户可能鼠标单击的任何工具。有没有办法获得用户点击的工具或工具对象的参考索引?

工具栏就是这样创建的,

self.m_toolBar = wx.ToolBar( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TB_HORIZONTAL )
self.m_toolBar.Bind( wx.EVT_LEFT_DOWN, self.onToolBar )

像这样添加新工具

self.m_toolBar.AddTool(wx.NewId(), "foo", wx.Bitmap(path), "bar")

事件处理程序onToolBar,我可以获取原始工具栏对象self.m_toolBar,

event.GetEventObject()

但我无法找到用户选择的实际工具的任何参考。 event.GetId()总是返回wx.ToolBar的ID,而不是我寻找的ToolBarBase对象。

选项,

1)我注意到我可以获得鼠标的(x,y)位置,并且我可以根据工具图标的大小等计算出哪个工具(索引)被按下了,但是这样做并没有&# 39;感觉这是正确的方法。 2)我想我可以创建多个wx.ToolBar对象,并且每个对象只放一个工具,因此event.GetId()将直接与所选工具相关。

3)我尝试的另一个选择是,

    obj = self.m_toolBar.AddTool(wx.NewId(), status_tip, wx.Bitmap(path), tooltip)
    obj.Bind(wx.EVT_LEFT_DOWN, self.onToolBarObj)

但是' ToolBarToolBase'对象没有属性' Bind'

但必须有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

所以核心问题是没有对添加的工具使用正确的绑定方法,而不是

obj = self.m_toolBar.AddTool(wx.NewId(), status_tip, wx.Bitmap(path), tooltip)
obj.Bind(wx.EVT_LEFT_DOWN, self.onToolBarObj)

应该是,

obj = self.m_toolBar.AddTool(wx.NewId(), status_tip, wx.Bitmap(path), tooltip)
self.Bind(wx.EVT_MENU, self.onToolBarObj, obj)