2009-06-18 34 views

回答

0

你有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
從wxPython的文檔

「」「 longHelpString 此字符串被顯示在狀態(如果有的話)的父框架的當鼠標指針是工具 內部‘’」在筆記本沒有按

所以工具欄沒有任何狀態欄顯示長時間的幫助,所以要麼通過src我們應該改變它如何查詢abt狀態欄並提供ref到主框架狀態欄

其他我認爲更好的方法是重寫wxToolBar :: OnMouseEnter和直接在狀態欄顯示幫助

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) 

有關EVT_TOOL_ENTER的簡短說明可在wxPython docs中找到。