wxPython: как заставить две панели инструментов использовать одну строку состояния для всплывающих подсказок?

StackOverflow https://stackoverflow.com/questions/1014239

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть интерфейс с двумя панелями инструментов, одна из которых прикреплена к рамке, а другая - во вкладке блокнота. Один в рамке покорно показывает строки longHelp в строке состояния, один во вкладке ноутбука не. Как указать пользователю на вкладке «Записная книжка», где должна отображаться его помощь, или я должен сам управлять входом и выходом из привязок?

Это было полезно?

Решение

У вас есть в wxWidgets:

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

В программе на C ++ вы можете переопределить эту функцию (простое изменение GetParent () на GetTopLevelParent () должно работать). В Python вы можете, как вы писали, только связывать события ввода / вывода и вызывать DoGiveHelp () из обработчиков.

Другие советы

Хотя этот пост довольно старый, я сам наткнулся на эту же проблему. Используя wxPython Phoenix 4.0.0a4, я нашел решение связать функцию с событием EVT_TOOL_ENTER, используя идентификатор панели инструментов.

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

Затем в вашей функции вы можете получить инструмент из панели инструментов, текст справки из инструмента и записать его в строку состояния.

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)

Краткое описание EVT_TOOL_ENTER можно найти в документы wxPython .

из документов wxPython & Quot; & Quot; & Quot; longHelpString Эта строка отображается в строке состояния (если есть) родительского фрейма, когда указатель мыши находится внутри инструмента. & Quot; & Quot; & Quot;

поэтому на панели инструментов в блокноте нет строки состояния для отображения длинной справки, поэтому либо через src мы должны исследовать, как она запрашивает строку состояния abt, и предоставлять ссылку на строку состояния основного кадра

иначе я думаю, что лучше всего переопределить wxToolBar :: OnMouseEnter и отобразить справку прямо в строке состояния

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top