Skip to content

Instantly share code, notes, and snippets.

@wontoncc
Last active April 11, 2026 10:33
Show Gist options
  • Select an option

  • Save wontoncc/1808234 to your computer and use it in GitHub Desktop.

Select an option

Save wontoncc/1808234 to your computer and use it in GitHub Desktop.
Balloon tip module, Python, using win32gui.
# -- coding: utf-8 --
from win32api import *
from win32gui import *
import win32con
import sys, os
import struct
import time
class WindowsBalloonTip:
def __init__(self, title, msg):
message_map = {
win32con.WM_DESTROY: self.OnDestroy,
}
# Register the Window class.
wc = WNDCLASS()
hinst = wc.hInstance = GetModuleHandle(None)
wc.lpszClassName = "PythonTaskbar"
wc.lpfnWndProc = message_map # could also specify a wndproc.
classAtom = RegisterClass(wc)
# Create the Window.
style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU
self.hwnd = CreateWindow( classAtom, "Taskbar", style, \
0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, \
0, 0, hinst, None)
UpdateWindow(self.hwnd)
iconPathName = os.path.abspath(os.path.join( sys.path[0], "balloontip.ico" ))
icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
try:
hicon = LoadImage(hinst, iconPathName, \
win32con.IMAGE_ICON, 0, 0, icon_flags)
except:
hicon = LoadIcon(0, win32con.IDI_APPLICATION)
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
nid = (self.hwnd, 0, flags, win32con.WM_USER+20, hicon, "tooltip")
Shell_NotifyIcon(NIM_ADD, nid)
Shell_NotifyIcon(NIM_MODIFY, \
(self.hwnd, 0, NIF_INFO, win32con.WM_USER+20,\
hicon, "Balloon tooltip",title,200,msg))
# self.show_balloon(title, msg)
time.sleep(10)
DestroyWindow(self.hwnd)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
Shell_NotifyIcon(NIM_DELETE, nid)
PostQuitMessage(0) # Terminate the app.
def balloon_tip(title, msg):
w=WindowsBalloonTip(msg, title)
@chriskiehl

Copy link
Copy Markdown

Awesome! Just the thing I was looking for!

@clippit

clippit commented Aug 27, 2012

Copy link
Copy Markdown

Thanks! But why * missed on L3-4 and __init__ shows incorrectly?

@boppreh

boppreh commented Nov 2, 2012

Copy link
Copy Markdown

Title and msg seem swapped, too, and there's a typo in the main function name ( ballon ). I've forked this Gist with the corrections: https://gist.github.com/4000505

@brousch

brousch commented Sep 11, 2013

Copy link
Copy Markdown

I PEPped up @boppreh's version a bit and fixed the "no 2nd notification" issue that @endolith reported. It still has one issue, which is that only one notification at a time can display, so if a 2nd notification is attempted before the 1st has finished, the 2nd is ignored. https://gist.github.com/brousch/6523559

@endolith

Copy link
Copy Markdown

@davidcorbin

Copy link
Copy Markdown

Ayy great in Windows 10!

@Thomas-Rudge

Copy link
Copy Markdown

Hi, this looks really great. But in windows 10 the notification does not persist in the action center. And if I try to call balloon_tip more than once I get an error:

Traceback (most recent call last):
  File "<string>", line 301, in runcode
  File "<interactive input>", line 1, in <module>
  File "C:\Users\Lenovo\Documents\Python\temp.py", line 54, in balloon_tip
    w=WindowsBalloonTip(msg, title)
  File "C:\Users\Lenovo\Documents\Python\temp.py", line 26, in __init__
    classAtom = RegisterClass(wc)
pywintypes.error: (1410, 'RegisterClass', 'Class already exists.')

@DarkRedman

Copy link
Copy Markdown

It doesn't work, I get an error.

from win32api import *
ImportError: DLL load failed: %1 is not a Win32 valid application.

@aswinpj

aswinpj commented Mar 29, 2016

Copy link
Copy Markdown

How do I change the Icon on the balloon tip? It doesnt work even after adding a .ico file by the name balloontip.ico on the root directory.

@Aanand-Kainth

Copy link
Copy Markdown

Can somebody please fork a copy in which notifications are persistent? I know this would include registering the program outside of the class, and unregistering it with with atexit, but I am unable to do so myself.

@deeman30rus

Copy link
Copy Markdown

thanks man, that worked for me!

@abhijeetsc

Copy link
Copy Markdown

when I am running the same code I am not getting any type of notification only.
I am using Python 3.5 on Windows 10.

@jithurjacob

Copy link
Copy Markdown

Hi guys, I've created this as an easy to use package

https://github.com/jithurjacob/Windows-10-Toast-Notifications

@guyverone

Copy link
Copy Markdown

here to say thank you.

@danielfain

Copy link
Copy Markdown

Works great on Windows 10. Thanks man!

@purplesyringa

Copy link
Copy Markdown

In case you have "win32api" module missing, try pip install pypiwin32.

@frakman1

Copy link
Copy Markdown

To use this feature, you would write code like this:

import balloontip as bt

bt.balloon_tip("My Title", "My Message")

and get something that looks like this (on Windows 7):

image

@vineethpisvas1

Copy link
Copy Markdown

Can anyone please tell me how to add a click bind to this notification. I want to open a website or do some task on the click and I am not able to bind it in the message map. Please help!

@vineethpisvas1

Copy link
Copy Markdown

@hao-lee

hao-lee commented Oct 29, 2019

Copy link
Copy Markdown

@jithurjacob

Hi guys, I've created this as an easy to use package

https://github.com/jithurjacob/Windows-10-Toast-Notifications

This is awesome! Thanks.

@ukowa

ukowa commented May 21, 2020

Copy link
Copy Markdown

Hi guys, I've created this as an easy to use package

https://github.com/jithurjacob/Windows-10-Toast-Notifications

that is indeed awesome - thank you!

@soyuznik

soyuznik commented May 5, 2021

Copy link
Copy Markdown

working on windows 10

@sdfiokpskiopdf

Copy link
Copy Markdown

working on windows 11

@fredericomattos

Copy link
Copy Markdown

working on Python 3.10 with windows 11

@Tunglies

Copy link
Copy Markdown

working on Python 3.10 with Windows 11 Pro for Workstations Version 10.0.22621 Build 22621

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment