import wx
import images
class demotaskbaricon(wx.taskbaricon):
tbmenu_restore = wx.newid()
tbmenu_close = wx.newid()
tbmenu_change = wx.newid()
tbmenu_remove = wx.newid()
def __init__(self, frame):
wx.taskbaricon.__init__(self)
self.frame = frame # set the image
icon = self.makeicon(images.getwxpdemoimage())
self.seticon(icon, wxpython demo)
self.imgidx = 1
# bind some events
self.bind(wx.evt_taskbar_left_dclick, self.ontaskbaractivate)
self.bind(wx.evt_menu, self.ontaskbaractivate, id=self.tbmenu_restore)
self.bind(wx.evt_menu, self.ontaskbarclose, id=self.tbmenu_close)
self.bind(wx.evt_menu, self.ontaskbarchange, id=self.tbmenu_change)
self.bind(wx.evt_menu, self.ontaskbarremove, id=self.tbmenu_remove)
def createpopupmenu(self):
this method is called by the base class when it needs to popup
the menu for the default evt_right_down event. just create
the menu how you want it and return it from this function,
the base class takes care of the rest.
menu = wx.menu()
menu.append(self.tbmenu_restore, restore wxpython demo)
menu.append(self.tbmenu_close, close wxpython demo)
menu.appendseparator()
menu.append(self.tbmenu_change, change the tb icon)
menu.append(self.tbmenu_remove, remove the tb icon)
return menu
def makeicon(self, img):
the various platforms have different requirements for the
icon size...
if wxmsw in wx.platforminfo:
img = img.scale(16, 16)
elif wxgtk in wx.platforminfo:
img = img.scale(22, 22)
# wxmac can be any size upto 128x128, so leave the source img alone....
icon = wx.iconfrombitmap(img.converttobitmap() )
return icon
def ontaskbaractivate(self, evt):
if self.frame.isiconized():
self.frame.iconize(false)
if not self.frame.isshown():
self.frame.show(true)
self.frame.raise()
def ontaskbarclose(self, evt):
self.frame.close()
def ontaskbarchange(self, evt):
names = [ wxpdemo, mondrian, pencil, carrot ]
name = names[self.imgidx]
getfunc = getattr(images, get%simage % name)
self.imgidx += 1
if self.imgidx >= len(names):
self.imgidx = 0
icon = self.makeicon(getfunc())
self.seticon(icon, this is a new icon: + name)
def ontaskbarremove(self, evt):
self.removeicon()
class myframe(wx.frame):
def __init__(self):
wx.frame.__init__(self, none, -1, my frame, size=(300, 300))
panel = wx.panel(self, -1)
panel.bind(wx.evt_motion, self.onmove)
wx.statictext(panel, -1, pos:, pos=(10, 12))
self.posctrl = wx.textctrl(panel, -1, , pos=(40, 10))
try:
self.tbicon = demotaskbaricon(self)
except:
self.tbicon = none
#wx.callafter(self.showtip)
#self.bind(wx.evt_close, self.onclosewindow)
#self.bind(wx.evt_iconize, self.oniconfiy)
def onclosewindow(self, event):
self.dying = true
self.demopage = none
self.codepage = none
self.mainmenu = none
if self.tbicon is not none:
self.tbicon.destroy()
self.destroy()
def oniconfiy(self, evt):
wx.logmessage(oniconfiy: %s % evt.iconized())
evt.skip()
def onmove(self, event):
pos = event.getposition()
self.posctrl.setvalue(%s, %s % (pos.x, pos.y))
if __name__ == '__main__':
app = wx.pysimpleapp()
frame = myframe()
frame.show(true)
app.mainloop()
