A Notify Icon

Two examples of using the Windows Forms NotifyIcon class to inform users of events. Both need an 'icon.ico' file to show in the system tray.

First Example
The first example, for a "PopUp-Balloon for event watching" comes from Marc, The Powershell Guy.



This code just uses a Thread.Sleep(9000), so that it exits automatically after nine seconds. The NotifyIcon code is launched on another thread. import clr clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing")

from System.Windows.Forms import (   Form, FormWindowState,    NotifyIcon, ToolTipIcon )

from System.IO import FileSystemWatcher

from System.Drawing import Icon

from System.Threading import (   ApartmentState, Thread, ThreadStart )

path = r"c:\path_to_watch"

def thread_proc: f = Form f.ShowInTaskbar = False f.WindowState = FormWindowState.Minimized n = NotifyIcon n.Icon = Icon(r"C:\path_to_icon\icon.ico") n.Text = "Watching" + path w = FileSystemWatcher w.Path = path def handle(w, a): n.ShowBalloonTip(10, str(a.ChangeType),                         a.FullPath, ToolTipIcon.Warning) w.Changed += handle w.Created += handle w.Deleted += handle w.EnableRaisingEvents = True n.Visible = True def handle(*args): f.Activate f.Shown += handle f.ShowDialog

t = Thread(ThreadStart(thread_proc)) t.ApartmentState = ApartmentState.STA t.Start

Thread.Sleep(90000)
 * 1) Sleep for 90 seconds so that you can
 * 2) see the notify icon in action

t.Abort
 * 1) Then die...

Second Example
The second example, perhaps a more conventional windows forms example comes from Andrzej Krzywda. This NotifyIcon has a ContextMenu, so that you can exit it.

His blog entry has an explanation of the code:

import clr

clr.AddReference("System.Windows.Forms") clr.AddReference("System.Drawing") from System.Drawing import Icon from System.Windows.Forms import (Application, ContextMenu,                                  MenuItem, NotifyIcon, Timer)

class Main(object):

def __init__(self): self.initNotifyIcon timer = Timer timer.Interval = 60000 timer.Tick += self.onTick timer.Start

def initNotifyIcon(self): self.notifyIcon = NotifyIcon self.notifyIcon.Icon = Icon("test.ico") self.notifyIcon.Visible = True self.notifyIcon.ContextMenu = self.initContextMenu

def onTick(self, sender, event): self.notifyIcon.BalloonTipTitle = "Hello, I'm IronPython" self.notifyIcon.BalloonTipText = "Who are you?" self.notifyIcon.ShowBalloonTip(1000)

def initContextMenu(self): contextMenu = ContextMenu exitMenuItem = MenuItem("Exit") exitMenuItem.Click += self.onExit contextMenu.MenuItems.Add(exitMenuItem) return contextMenu

def onExit(self, sender, event): self.notifyIcon.Visible = False Application.Exit if __name__ == "__main__": main = Main Application.Run

Back to Contents.