wxPython: как заставить две панели инструментов использовать одну строку состояния для всплывающих подсказок? - PullRequest
2 голосов
/ 18 июня 2009

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

Ответы [ 3 ]

2 голосов
/ 18 июля 2017

Хотя этот пост довольно старый, я сам наткнулся на эту же проблему.Используя 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 docs .

0 голосов
/ 25 июня 2009

У вас есть в wxWidgets:

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

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

0 голосов
/ 20 июня 2009

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

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

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

...