xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.


Ticket #280: wxtray2.py

File wxtray2.py, 3.1 KB (added by Antoine Martin, 9 years ago)

another test tray example using python wx

Line 
1import wx
2import string
3
4import sys
5
6ID_ICON_TIMER = wx.NewId()
7
8##
9# The IconBar class
10#
11class IconBar:
12
13    ##
14    # \brief the constructor default left: red, default right: green
15    #
16    def __init__(self,l_off=[128,0,0],l_on=[255,0,0],r_off=[0,128,0],r_on=[0,255,0]):
17        self.s_line = "\xff\xff\xff"+"\0"*45
18        self.s_border = "\xff\xff\xff\0\0\0"
19        self.s_point = "\0"*3
20        self.sl_off = string.join(map(chr,l_off),'')*6
21        self.sl_on = string.join(map(chr,l_on),'')*6
22        self.sr_off = string.join(map(chr,r_off),'')*6
23        self.sr_on = string.join(map(chr,r_on),'')*6
24
25    ##
26    # \brief gets a new icon with 0 <= l,r <= 5
27    #
28    def Get(self,l,r):
29        s=""+self.s_line
30        for i in range(5):
31            if i<(5-l):
32                sl = self.sl_off
33            else:
34                sl = self.sl_on
35
36            if i<(5-r):
37                sr = self.sr_off
38            else:
39                sr = self.sr_on
40
41            s+=self.s_border+sl+self.s_point+sr+self.s_point
42            s+=self.s_border+sl+self.s_point+sr+self.s_point
43            s+=self.s_line
44
45        image = wx.EmptyImage(16,16)
46        image.SetData(s)
47
48        bmp = image.ConvertToBitmap()
49        bmp.SetMask(wx.Mask(bmp, wx.WHITE)) #sets the transparency colour to white
50
51        icon = wx.EmptyIcon()
52        icon.CopyFromBitmap(bmp)
53
54        return icon
55
56##
57# The TaskBarIcon class
58#
59class MyTaskBarIcon(wx.TaskBarIcon):
60
61    l = 0
62    r = 0
63
64    ##
65    # \brief the constructor
66    #
67    def __init__(self, frame):
68        wx.TaskBarIcon.__init__(self)
69        self.frame = frame
70        self.IconBar = IconBar((127,127,0),(255,255,0),(0,127,127),(0,255,255))
71        self.SetIconBar(self.l,self.r)
72
73    ##
74    # \brief sets the icon timer
75    #
76    def SetIconTimer(self):
77        self.icon_timer = wx.Timer(self, ID_ICON_TIMER)
78        wx.EVT_TIMER(self, ID_ICON_TIMER, self.BlinkIcon)
79        self.icon_timer.Start(100)
80
81    ##
82    # \brief blinks the icon and updates self.l and self.r
83    #
84    def BlinkIcon(self, event):
85        self.SetIconBar(self.l,self.r)
86        self.l += 1
87        if self.l > 5:
88            self.l = 0
89            self.r += 1
90            if self.r > 5:
91                self.r = 0
92    ##
93    # \brief sets the icon bar and a message
94    #
95    def SetIconBar(self,l,r):
96        icon = self.IconBar.Get(l,r)
97        self.SetIcon(icon, "L:%d,R:%d"%(l,r))
98
99##
100# The task bar application
101#
102class TaskBarApp(wx.Frame):
103
104    ##
105    # \brief the constructor
106    #
107    def __init__(self, parent, id, title):
108        wx.Frame.__init__(self, parent, -1, title, size = (1, 1),
109            style=wx.FRAME_NO_TASKBAR|wx.NO_FULL_REPAINT_ON_RESIZE)
110
111        self.tbicon = MyTaskBarIcon(self)
112        self.tbicon.SetIconTimer()
113
114        self.Show(True)
115
116##
117# The main application wx.App class
118#
119class MyApp(wx.App):
120    def OnInit(self):
121        frame = TaskBarApp(None, -1, ' ')
122        frame.Center(wx.BOTH)
123        frame.Show(False)
124        return True
125
126def main(argv=None):
127    if argv is None:
128        argv = sys.argv
129
130    app = MyApp(0)
131    app.MainLoop()
132
133if __name__ == '__main__':
134    main()