wxPython cross platform taskbar

D

dirvine

Hi All

Does anyone have any peice of wxPython code thats cross platform and
allows an app to be minimised in the system tray. I am hoping for
windows/kde/gnome/darwin if possible. I have been playing about and
have a couple of systems that nearly get there but not quite.

I would llike to create an app that does this in the way limewire/skype
etc. do it

Hope you can help
David

Heres sample code that nearly gets there I think - it appears to work
on ubuntu/gnome

import wx

ICON_STATE = 0
BLINK_STATE = 0

ID_ICON_TIMER = wx.NewId()

class TaskBarApp(wx.Frame):
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 = wx.TaskBarIcon()
icon = wx.Icon('yellow.ico', wx.BITMAP_TYPE_ICO)
self.tbicon.SetIcon(icon, '')
#wx.EVT_TASKBAR_LEFT_DCLICK(self.tbicon,
self.OnTaskBarLeftDClick)
#wx.EVT_TASKBAR_RIGHT_UP(self.tbicon, self.OnTaskBarRightClick)
self.tbicon.Bind(wx.EVT_TASKBAR_LEFT_DCLICK,
self.OnTaskBarLeftDClick)
self.tbicon.Bind(wx.EVT_TASKBAR_RIGHT_UP,
self.OnTaskBarRightClick)
self.Bind(wx.EVT_TIMER, self.BlinkIcon, id=ID_ICON_TIMER)
self.Show(True)

def OnTaskBarLeftDClick(self, evt):
global ICON_STATE
try:
self.icontimer.Stop()
except:
pass
if ICON_STATE == 1:
icon = wx.Icon('yellow.ico', wx.BITMAP_TYPE_ICO)
self.tbicon.SetIcon(icon, 'Yellow')
ICON_STATE = 0
else:
self.SetIconTimer()
ICON_STATE = 1

def OnTaskBarRightClick(self, evt):
try:
self.icontimer.Stop()
except:
pass
self.tbicon.Destroy()
self.Close(True)
wx.GetApp().ProcessIdle()
#def OnTaskBarRightClick(self, evt):
# self.Close(True)
# wx.GetApp().ProcessIdle()

def SetIconTimer(self):
self.icontimer = wx.Timer(self, ID_ICON_TIMER)
wx.EVT_TIMER(self, ID_ICON_TIMER, self.BlinkIcon)
self.icontimer.Start(1000)

def BlinkIcon(self, evt):
global BLINK_STATE
if BLINK_STATE == 0:
icon = wx.Icon('red.ico', wx.BITMAP_TYPE_ICO)
self.tbicon.SetIcon(icon, 'Red')
BLINK_STATE = 1
else:
icon = wx.Icon('black.ico', wx.BITMAP_TYPE_ICO)
self.tbicon.SetIcon(icon, 'Black')
BLINK_STATE = 0

class MyApp(wx.App):
def OnInit(self):
frame = TaskBarApp(None, -1, ' ')
frame.Center(wx.BOTH)
frame.Show(False)
return True

def main():
app = MyApp(0)
app.MainLoop()

if __name__ == '__main__':
main()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top