class FrameworkStatusBar(wx.StatusBar): """A custom status bar for displaying the application version in the bottom right corner.""" def __init__(self, parent, widths, error_delay): wx.StatusBar.__init__(self, parent, -1) self.error_delay = error_delay self.SetFieldsCount(len(widths)) self.SetStatusWidths(widths) self.field_widths = list(widths) self.error_control = GenStaticText(self, -1) self.error_control.Hide() self.message_expire_time = 0 self.reposition_controls() self.expire_timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.on_timer, self.expire_timer) self.Bind(wx.EVT_SIZE, self.on_size) f = self.GetFont() self.error_control.SetFont( wx.Font(f.GetPointSize(), f.GetFamily(), f.GetStyle(), wx.BOLD, f.GetUnderlined(), f.GetFaceName(), f.GetEncoding())) self.error_control.SetForegroundColour((255, 255, 255)) self.error_control.SetBackgroundColour((211, 72, 54)) def on_size(self, event): self.reposition_controls() def on_timer(self, event): self.error_control.Hide() def reposition_controls(self): rect = self.GetFieldRect(0) self.error_control.SetRect(rect) def show_error(self, text): self.error_control.SetLabel(" " + text) rect = self.GetFieldRect(0) self.error_control.SetRect(rect) self.error_control.Show() self.expire_timer.Start(self.error_delay * 1000, oneShot=True)