In wxpython when we create a multi field statusbar, the first field is being used by default, to display the help texts of mouse hovered menu items.
for example in the code below:
import wx
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Multi field status bar.')
panel = wx.Panel(self)
self.statusbar = self.CreateStatusBar(2)
self.menubar = wx.MenuBar()
self.menuitem = wx.Menu()
self.SetMenuBar(self.menubar)
if True: # Utilitie IDs:
self.ID_new_utilitie = wx.NewId()
self.ID_delete_utilitie = wx.NewId()
if True: # Menu items:
self.menuitem.Append(self.ID_new_utilitie, "&New", "Create New Utilitie.")
self.menuitem.Append(self.ID_delete_utilitie, "&Delete", "Delete Selected Utilitie.")
self.menubar.Append(self.menuitem, '&Actions')
if True: # Utilitie Actions:
wx.EVT_MENU(self, self.ID_new_utilitie, self.Create_New_Utilitie)
wx.EVT_MENU(self, self.ID_delete_utilitie, self.Delete_Selected_Utilitie)
self.Show()
def Create_New_Utilitie(self, event):
pass
def Delete_Selected_Utilitie(self, event):
pass
if __name__ == '__main__':
app = wx.App(False)
frame = MainFrame()
app.MainLoop()
Whenever we hover over a menu item, the help text gets displayed automatically in the 1st field (by default).
An image illustrating my question while running the example above.
Please note that I am not asking how to SetStatusText the 2nd field with help texts but how to change the default field for displaying them.
Thanks.
OK, I finally found the answer.
to change the default field in the statusbar (where menu help strings are shown by default) you need to catch them with EVT_MENU_HIGHLIGHT_ALL(func).
So by taking as an example the code in my question above, here are the changes:
import wx
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title='Multi field status bar.')
panel = wx.Panel(self)
self.statusbar = self.CreateStatusBar(2)
self.menubar = wx.MenuBar()
self.menuitem = wx.Menu()
self.SetMenuBar(self.menubar)
self.statusbar.SetStatusText('Nothing here!!!', 0)
if True: # Utilitie IDs:
self.ID_new_utilitie = wx.NewId()
self.ID_delete_utilitie = wx.NewId()
if True: # Menu items:
self.menuitem.Append(self.ID_new_utilitie, "&New", "Create New Utilitie.")
self.menuitem.Append(self.ID_delete_utilitie, "&Delete", "Delete Selected Utilitie.")
self.menubar.Append(self.menuitem, '&Actions')
if True: # Utilitie Actions:
wx.EVT_MENU(self, self.ID_new_utilitie, self.Create_New_Utilitie)
wx.EVT_MENU(self, self.ID_delete_utilitie, self.Delete_Selected_Utilitie)
self.Show()
"""The event catcher here."""
wx.EVT_MENU_HIGHLIGHT_ALL(self, self.statusbar_status)
def Create_New_Utilitie(self, event):
pass
def Delete_Selected_Utilitie(self, event):
pass
def statusbar_status(self, event):
"""Polemos: Change default statusbar field for showing menu help."""
event_catcher = event.GetId()
try: msg = self.menubar.GetHelpString(event_catcher)
except: pass
try: self.statusbar.SetStatusText(msg, 1)
except: self.statusbar.SetStatusText('', 1) # Resets.
if __name__ == '__main__':
app = wx.App(False)
frame = MainFrame()
app.MainLoop()
More info in the links below: