我有一個接口有兩個工具欄,一個連接到框架,另一個嵌入在筆記本選項卡中。框架中的人忠實地在狀態欄中顯示longHelp字符串,筆記本選項卡 中的字符串沒有。如何告訴筆記本選項卡上顯示其幫助的位置,或者我必須自己管理輸入和離開綁定?wxPython:如何讓兩個工具欄使用工具提示的一個狀態欄?
2
A
回答
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中找到。