【问题标题】:wxPython: how to make two toolbars use one statusbar for tooltips?wxPython:如何让两个工具栏使用一个状态栏作为工具提示?
【发布时间】:2009-06-18 17:57:24
【问题描述】:

我的界面有两个工具栏,一个附加到框架上,一个嵌入到笔记本选项卡中。框架中的一个尽职尽责地在状态栏中显示 longHelp 字符串,笔记本选项卡中的那个 才不是。如何告诉笔记本选项卡上的人在哪里显示其帮助,还是我必须自己管理进入和离开绑定?

【问题讨论】:

    标签: wxpython wxwidgets


    【解决方案1】:

    虽然这篇文章已经相当老了,但我自己也偶然发现了同样的问题。使用 wxPython Phoenix 4.0.0a4,我找到的解决方案是使用工具栏的 id 将函数绑定到 EVT_TOOL_ENTER 事件。

    your_frame.Bind(wx.EVT_TOOL_ENTER, your_function, id=toolbar_id)
    

    然后在 your_function 中,您可以从工具栏中获取工具,从工具中获取帮助文本并将其写入状态栏。

    def your_function(e):
        tool_id = e.GetSelection()
        if tool_id != -1:
            # if the mouse is over a toolbar item
            event_object = e.GetEventObject()
            tool = event_object.FindById(tool_id)  
            text = tool.GetLongHelp()
        else:
            # if the mouse is in the toolbar area, but not on an item
            text = some_default_text
        your_frame.GetStatusBar().SetStatusText(text)
    

    可以在wxPython docs 中找到 EVT_TOOL_ENTER 的简短说明。

    【讨论】:

      【解决方案2】:

      你在 wxWidgets 中有:

      void wxToolBarBase::OnMouseEnter(int id)
      {
          ...
          wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
          if ( frame )
          {
              ...
              frame->DoGiveHelp(help, id != wxID_ANY);
          }
          ...
      }
      

      在 C++ 程序中,您可以覆盖此函数(只需将 GetParent() 更改为 GetTopLevelParent() 即可)。在 Python 中,如您所写,您只能绑定进入/离开事件并从处理程序调用 DoGiveHelp()。

      【讨论】:

        【解决方案3】:

        来自 wxPython 文档 """ 长帮助字符串 当鼠标指针位于工具内时,此字符串显示在父框架的状态栏(如果有)中 """

        因此 notebook 中的工具栏没有任何状态栏来显示长帮助,因此我们应该通过 src 来调查它如何查询 abt 状态栏并为主框架状态栏提供参考

        否则我认为更好的方法是覆盖 wxToolBar::OnMouseEnter 并直接在状态栏上显示帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-24
          • 2015-11-29
          • 1970-01-01
          • 1970-01-01
          • 2011-02-20
          • 2016-01-20
          相关资源
          最近更新 更多