【问题标题】:WxPython ToolBar Tool reference from mouse event来自鼠标事件的 WxPython ToolBar 工具参考
【发布时间】:2023-03-14 17:34:01
【问题描述】:

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

工具栏是这样创建的,

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) 位置,并且我可以根据工具图标的大小等计算按下了哪个工具(索引),但这只是没有感觉不是这样做的正确方法。 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”对象没有“绑定”属性

但一定有更好的方法吗?

【问题讨论】:

    标签: wxpython toolbar


    【解决方案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)
    

    【讨论】:

    • 工具栏和菜单栏事件在大多数情况下都与框架对象绑定,我认为这就是self 在这里所指的内容。
    【解决方案2】:

    您可以这样访问 ToolBarBase 对象:

    obj = self.m_toolBar.AddTool(wx.NewId(), status_tip, wx.Bitmap(path), tooltip)
    self.Bind(wx.EVT_MENU, self.onToolBarObj, obj)
    
    def onToolBarObj(self, event)
    pid = event.GetId()
    tool = event.GetEventObject().FindById(pid)
    

    拥有“工具”后,您可以对工具栏工具做任何您想做的事情。

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      相关资源
      最近更新 更多