class MyFrame(wx.Frame): """ We simply derive a new class of Frame. """ def __init__(self, parent, title, opts, sources): wx.Frame.__init__(self, parent, title=title, size=((800 if opts.verbosity < 2 else 1100), 400)) self.lock = Lock() self.opts = opts self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE) self.control.SetEditable(False) self.Show(True) self.twiddle_mode = 2 self.twiddle_next = 0 self.twiddle_me = '|/-\\' self.twiddle_size = len(self.twiddle_me) self.importer = Importer(self, sources, self.opts) self.Bind(wx.EVT_CLOSE, self.onClose) def onClose(self, event): self.importer.interrupt.set() while self.importer.isAlive(): self.importer.join(1) wx.Yield() self.Destroy() def __append_text(self, s): with self.lock: self.control.AppendText(s) def logger(self, s): # print s if self.twiddle_mode != 2: re_twiddle = True self.twiddle(2) else: re_twiddle = False self.__append_text("%s\n" % (s,)) if re_twiddle: self.twiddle(0) def twiddle(self, mode): # Mode (0, 1, 2) == (start (add first twiddle), advance, erase) self.twiddle_mode = mode if mode == 0: # append self.twiddle_next = 0 self.__append_text(self.twiddle_me[self.twiddle_next]) elif mode == 1: # replace lastPos = self.control.GetLastPosition() self.control.Replace(lastPos-1, lastPos, self.twiddle_me[self.twiddle_next]) elif mode == 2: # erase lastPos = self.control.GetLastPosition() self.control.Remove(lastPos-1, lastPos) # Advance self.twiddle_next = (self.twiddle_next + 1) % self.twiddle_size