代码之家  ›  专栏  ›  技术社区  ›  user9277612

来自鼠标事件的WxPython工具栏工具引用

  •  0
  • user9277612  · 技术社区  · 7 年前

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

    工具栏是这样创建的,

    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\u工具栏,

    event.GetEventObject()
    

    但我找不到用户选择的实际工具的任何参考。事件。GetId()始终返回wx的ID。工具栏,而不是我搜索的ToolBarBase对象。

    选项,

    1) 我确实注意到我可以得到鼠标的(x,y)位置,我可以根据工具图标的大小等计算出按下了哪个工具(索引),但这感觉不是正确的方法。 2) 我想我可以创建多个wx。工具栏对象,并在每个对象中仅放置一个工具,因此事件。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”

    但一定有更好的方法吗?

    2 回复  |  直到 7 年前
        1
  •  1
  •   user9277612    7 年前

    因此,核心问题不是为添加的工具使用正确的绑定方法,而是,

    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)
    
        2
  •  1
  •   sumotide    3 年前

    可以按如下方式访问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)
    

    拥有“工具”后,您可以对工具栏工具执行任何操作。