import wx import string import sys ID_ICON_TIMER = wx.NewId() ## # The IconBar class # class IconBar: ## # \brief the constructor default left: red, default right: green # def __init__(self,l_off=[128,0,0],l_on=[255,0,0],r_off=[0,128,0],r_on=[0,255,0]): self.s_line = "\xff\xff\xff"+"\0"*45 self.s_border = "\xff\xff\xff\0\0\0" self.s_point = "\0"*3 self.sl_off = string.join(map(chr,l_off),'')*6 self.sl_on = string.join(map(chr,l_on),'')*6 self.sr_off = string.join(map(chr,r_off),'')*6 self.sr_on = string.join(map(chr,r_on),'')*6 ## # \brief gets a new icon with 0 <= l,r <= 5 # def Get(self,l,r): s=""+self.s_line for i in range(5): if i<(5-l): sl = self.sl_off else: sl = self.sl_on if i<(5-r): sr = self.sr_off else: sr = self.sr_on s+=self.s_border+sl+self.s_point+sr+self.s_point s+=self.s_border+sl+self.s_point+sr+self.s_point s+=self.s_line image = wx.EmptyImage(16,16) image.SetData(s) bmp = image.ConvertToBitmap() bmp.SetMask(wx.Mask(bmp, wx.WHITE)) #sets the transparency colour to white icon = wx.EmptyIcon() icon.CopyFromBitmap(bmp) return icon ## # The TaskBarIcon class # class MyTaskBarIcon(wx.TaskBarIcon): l = 0 r = 0 ## # \brief the constructor # def __init__(self, frame): wx.TaskBarIcon.__init__(self) self.frame = frame self.IconBar = IconBar((127,127,0),(255,255,0),(0,127,127),(0,255,255)) self.SetIconBar(self.l,self.r) ## # \brief sets the icon timer # def SetIconTimer(self): self.icon_timer = wx.Timer(self, ID_ICON_TIMER) wx.EVT_TIMER(self, ID_ICON_TIMER, self.BlinkIcon) self.icon_timer.Start(100) ## # \brief blinks the icon and updates self.l and self.r # def BlinkIcon(self, event): self.SetIconBar(self.l,self.r) self.l += 1 if self.l > 5: self.l = 0 self.r += 1 if self.r > 5: self.r = 0 ## # \brief sets the icon bar and a message # def SetIconBar(self,l,r): icon = self.IconBar.Get(l,r) self.SetIcon(icon, "L:%d,R:%d"%(l,r)) ## # The task bar application # class TaskBarApp(wx.Frame): ## # \brief the constructor # def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, -1, title, size = (1, 1), style=wx.FRAME_NO_TASKBAR|wx.NO_FULL_REPAINT_ON_RESIZE) self.tbicon = MyTaskBarIcon(self) self.tbicon.SetIconTimer() self.Show(True) ## # The main application wx.App class # class MyApp(wx.App): def OnInit(self): frame = TaskBarApp(None, -1, ' ') frame.Center(wx.BOTH) frame.Show(False) return True def main(argv=None): if argv is None: argv = sys.argv app = MyApp(0) app.MainLoop() if __name__ == '__main__': main()