def METHOD_NAME(self, errmsg, ts=None):
    if ts is None:
        # Add the time the error occurred
        ts = time.strftime("%m/%d %H:%M:%S", time.localtime())
    if not self.gui_up:
        self.pending_errors.append((errmsg, ts))
        return
    vbox = Widgets.VBox()
    hbox = Widgets.HBox()
    # Add the time the error occurred
    ts = time.strftime("%m/%d %H:%M:%S", time.localtime())
    lbl = Widgets.Label(ts, halign='left')
    hbox.add_widget(lbl, stretch=0)
    hbox.add_widget(Widgets.Label(''), stretch=1)
    vbox.add_widget(hbox, stretch=0)
    tw = Widgets.TextArea(editable=False, wrap=False)
    tw.set_font(self.msg_font)
    tw.set_text(errmsg)
    vbox.add_widget(tw, stretch=1)
    hbox = Widgets.HBox()
    btn = Widgets.Button("Remove")
    btn.add_callback('activated', lambda w: self.remove_error(vbox))
    hbox.add_widget(btn)
    hbox.add_widget(Widgets.Label(''), stretch=1)
    vbox.add_widget(hbox, stretch=0)
    # special hack for Qt
    vbox.cfg_expand(horizontal='minimum')
    self.msg_list.add_widget(vbox, stretch=0)
    # TODO: force scroll to bottom