Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a system tray popup message with python? (Windows)

I'd like to know how to create a system tray popup message with python. I have seen those in lots of softaware, but yet difficult to find resources to do it easily with any language. Anyone knows some library for doing this in Python?

like image 424
Roman Rdgz Avatar asked Apr 10 '13 08:04

Roman Rdgz


People also ask

How do I create a pop up notification in Python?

In order to create a Python popup message, you can use Tkinter message prompts. First, you need to import the Tkinter package to use this method. The Tkinter message box module offers different options and configurations.

How do I create a system tray application in Python?

To create a System Tray icon of a tkinter application, we can use pystray module in Python. It has many inbuilt functions and methods that can be used to configure the system tray icon of the application. To install pystray in your machine, you can type "pip install pystray" command in your shell or command prompt.

How do you send system notifications in Python?

You can send notifications by calling the notify() function from notification. It takes four parameters: title The large header text at the top of a notification. message The longer, smaller text where you put more detailed information.


2 Answers

With the help of the pywin32 library you can use the following example code I found here:

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",msg,200,title))         # 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(title, msg)  if __name__ == '__main__':     balloon_tip("Title for popup", "This is the popup's message") 
like image 84
halex Avatar answered Sep 22 '22 20:09

halex


I recently used the Plyer package to create cross-platform notifications without pain, using the Notification facade (it have many other interesting things that are worth to take a look at).

Pretty easy to use:

from plyer.utils import platform from plyer import notification  notification.notify(     title='Here is the title',     message='Here is the message',     app_name='Here is the application name',     app_icon='path/to/the/icon.' + ('ico' if platform == 'win' else 'png') ) 
like image 26
Epoc Avatar answered Sep 23 '22 20:09

Epoc