Skip to content

Instantly share code, notes, and snippets.

@brunomsantiago
Created February 18, 2022 18:29
Show Gist options
  • Save brunomsantiago/883615a90d775868e16c1763d3a1497e to your computer and use it in GitHub Desktop.
Save brunomsantiago/883615a90d775868e16c1763d3a1497e to your computer and use it in GitHub Desktop.
Template for PyQT tray application with system notifications, status on both icon color and tootip
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QIcon, QPixmap
from PyQt5.QtWidgets import QMainWindow, QMenu, QSystemTrayIcon
green_icon = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002\x00\x00\x002\x08\x06\x00\x00\x00\x1e?\x88\xb1\x00\x00\x0c\xf3IDATx\x9c\xedY{pT\xd7y\xff}\xe7\xdc{\xb5+\xad\x00\xa1\x07z\xf0\x10\x18$\x12\x84\x93\x16\xb0\x0b*f\x150\xaf)Nl\x03\xf6\xe0d<\xe9\xb4\x9e\x16\xd3d\x92\x99$\x1d:\x8e\xc1u\x9d\xb1'\xe9\xb4um'\x19\xb7\x8e\xebW\x02\x8e\r\xc4\xd8 ;h1\x96\"\xc0\xb2\xb1\xa16P0\x8b\x91\x84@+\t\xc1J\xbb\xdc{\xcf\xfd\xfa\xc7\xee]\xf6qw\x853\xe9L\xd2\xc9oF\xa3\x9d\xbd\xe7~\xdf\xf7;\xdfs\xcf\xa1\xf6\xb7\xf7\xe0\xff\x03\xb4B\x0f\tD\xd7#\x84\xc1\xfc\xdb\x1a\xf0\xbb\xd2Q\x90HysC\xa0\x1c\x15\x05\x15\x0c \x82H\xfb\x89+\xd7c\xcc\xff\xa5\x8e\x82D68\x1bhT\x0ck\x86,\xca\xbb\x1b\x93\xa4\x8f\x1f\xe46\r\xa1\x90]\xd0\x9a<\xf8;c\x83\xbc\xa0\xe2y\xbd2\x0c\x80\xac\x11\xf5|\xf0\xc3\x82:<\x89\x84\x83a\xdf=7\xdf\xa3\xe3\xc5\xdf|W\xd4`\x99\x13'\x13`\x99\xb5L\x01\xa4\xd1e>\x83\x9a5\xdf|&\xf8x\xf4l(|\x95\x811\xc3\x8c@\xd4\xd0\xdc\x10\xa85\xbe\xc0\xd6\x85\xcbOs\x80j%\x98U\xeeR\x05\x90\x86n\xee\xd8k\xfd\xe0\x91\x15\xfa\xc2Q\x84\x10\xf7\x94\x99\x9d\xec\x04\x107W\x04\xdep\x9e\xa3G\xd4\xbf\xbe\xe2\x14a\xe9X\x86\xe1\x87\xf8\xca\x8e\xbf\x7f\xee\xd7\x95\\i\xe7S\x94\x8e\xad\xc1\x90\xb6w\xc7\xe6:1a\xdc\x0c^\x8c}c\xad'\x13]\xb5\xbe\x8a\xaf\xf7o\x9d\xf5q\xdb\x96\x07\x81\x10r<#<^Cs\xa4\x11\x0f\xdd\xfdc\xbf#1MB\xda\x06\x0c[B\xe6\xfc\x190\xe2\x06\x0c\xe0\x0e\xd1\xd2\xe9\xbc_\t\x1b~\x02\xc6L\xde\xfb\xad&?\xad\xa1A\xbe\x11\xeb\\9\xde\xf2\x13\xffY\xc3\xf8\x9e\xa6\x01_p+4\xa0\xde3\x8ar\x88\xac\xc36\x81\x13(\xd5\xd6:\xd5 \xcc\x94\x90\x9a\tSSP\x9e\x7f&L`\x9a\xb3\xf2\xb1\x99\x8f\x8f\xc3\xc3\xc1+\x1cDv\x08f`=\xb6\xcb\xdb>\xb8\xcd\x8fG\xab\xaaPB\xeb%\xa4f\xb2\xe9\xf3\x96\xad4\t\xa9\x810S|\x99'\xcdW\xf3\xfd\xb0\xa2\xfau\x11\x99\x13\xac$>\xc3:fYS\x92O\xf3&\x98\x82\xd2\x0c\x186$\x1a\x9d\xc7\xd5\xa2\x93[_\x9a\x00\x0b\xfeBD6\x06\x17\xe88\x00?\xee\x8a\xaf\x80\xc6\xe5\x00\xec\xc2>T\x89\xe7M\xa8\xd4\xa0\xf9\x80\x08\xbc\xbc\x9eCd\t\xea5\x9c\x07\x9c\nL\x1f;H\xd2\xb0\x80\x97\xfdR\xbd4\x11\xa8\xf0T\x04$\x92|\xad\xb5B\x9f\xbfq\xc5\x10j\xf9n\x00P\xf0H\xf1\x0c$\x1c\xcc\xf5\xa8\x19\xc1\x88\x1f\x00\xbc\nJ\x0e\x91&+\xa0\xd3\xf7h\x90J\xd1p=\xf6\x9b0\x131[\xc6\xcbw\xff\xcd\xbe:\x8c\x8f\x98\x1cD\x91\xd7\xda-\xc16\xd9\xb0\xbb|\xe2\x91\xdft.\x80\x8e\xc5\x12\xd2VP\x05[\x80\x0b\xae\xa6I\xfd\x88\xf9\"\x88x>\xcf B \xaa\xc0ll\xb47\x12\x17cV\xe2\xdb\xb1v\x0c0`\xd8 \x04p\x9f\xbd8\x14;\x987\xe9\xdd$wn\xe4\xb5 @\x16N'\xa4\xeb\x17e<\xe3\x04\x9d\x90\x1b\xdb\xdbF\xc7$\x02\x00\xcd\x91F<}\xc7\x8b\xc5$\x13\x1e\x19\x9b\xc6\xb5\xf0\xa0\xd9X\xfd\xa4\xfd\xd3\x12h\x88e\xbb\x7f=\xb6\xcb5G\xef\xd1\xf1hU\x15\x05p\xa7\x01\x03&\x17n\xc8\xe9\xfa\xd9\x8f)]\xe8B\x7f\xcbG\x84`0\xe7\xbd\x0c\"n\xc5r\xee\xe1\x1a\xa1\xa1\xc6\x80\x81\xebq\xbdJT\x17\xdb\xf1\xe1\xe6\x9e'\xce\xcf=uu\xd0@3J\xd3\xd7l\x0c.\xd0i\xcf\x95RqWl\xa5#Q\t\xc0\x06\x99c\x89N\xe9gMT\xdb\xb7\xa9\xb2\xbf4f\x14\x01\xe1\xc2D\xe6\x04+\x89\xcf\xb1\xdfn\xa2\x19\x8a\xe0C\x81\x8a\x95\r\t$\x82\xe9+\xce\xaaCz\xa8\x024^s\x07B7\xc9o\xfe\x87\x15\xc3N-\xeeJ\x1ax\xbd\xa2\x13 g\x92\xbc\te\x9aY\xe6\x87\x15\xd5\xb3C7\x83\xc8\x12\xd4kt\x9cb(S\xd3?\x9b\x96\xb4\x10\xac\x16K\x9fj\xfei\x19j\x87/s01\xd6\xb8I\xde\xd5\xd69\xef\xb3&9\x90\xccA\x00\xce\x8d\xa8)v\x94\x1f\x1e\t\x9fA\xa4\xc9\n\xe8\x91\x87p\x05%\xe2\xba*V&\x11\xb7\xa78\xd3\x9c-Xt\xba\xf7t9,\xf8\tD\xf7[A\xbfZ\xa5\x86>[\x92\xe7\x82\xeb\xc5\x948;\x9e%8E\x84@4\x1b\xcd\xd8`\xdfM\xf093\x93\xc6y\n\x94\x90\xb6\xd7h\xe8\xae\x17\x0b\xb0\xfc?\xc4\xf3\x13\x80\n\xac\xc36\xb1\xe6\xe8\n]\xfb\xa7\xf2J.\xa1u\x06\x00\x93\xcd\x1co\xb8cIA&\x15Nu/\xf7\xeaa=le?\xca\xf0\xc8\xac\xb3\x13\xf5\xd6o\xb7\x96\x92\xc4l\x00\x90\xec\xed~\x05\xa5y\xb5<7\\\x9cqX\xf6\xce7:\xa7\x00G\xec\x7fln)\x16\xbf\x8c\xfa\xc4\xbd\xce\xcaD'7<;\xb9;\x96\xe4\xd1\x97\xf8P\x8a\xba\xff\xa1\xb0\xfcz\xe8Y\x1b\xc1\xcc\x8a\x97\"\xb2%\xd8&E\xb7\xf0Q\x8bS\xc3\x1a\xca\x0c\x180\xb3\x14\x1a\xae\x17F\xc5^\ty\x06@N\x8fM\xf6\x14\x9f\xfaknyM\x1c\xafl\x16\xf3\x027=\xb2|\xd4\xa9\xc1\x86\x0c\xa3\x92Hy\xc1F\x87\xb0q0\xe3\xbbl\x14a\xea\xb1\xda\xa3Z\xc3\x82^\xca\x1e\x1eSD\x96\xa0^\xe33E:\xdf\x80i@\x9e\x8aE\x89\xa4\xa3]\xce\x0e\xa7G\xbd\x0e\x00F\xf2;\x17)Cg\xe2\xd6\x1fi?,nx\xb3\xce8\xf4f\xe7<\x18Xdx$y*_^\xa3\x17\x9c\xf3t0\xe3\xbbk25\x03\x06\x84&'\xab\xdbE\xc5-\xda-9\xc3cfg?u\xd5BE\xfe\x8a\xe5\x1a\xc9}\xa2\x0f\xafj\xfb2\x0cOS*!m\xf8p\x93\xf5\x9c\x98\xd7\xb1\xaa\x83\xb0\x80\xefL\x84S\xa6\x81\x06'F\x1c\rz\xbf\xbc\x9d;\xa18Z@\xb7\xed@\x95\xa2\x89'\x96\xf9\xea\x8a\x01d\xcct)\"MV\xbd~\xe1\xfb\x17\xa2T\x82\xc6|\xc2$\xa4&!\xe3\xd4\xe3\x8c|qS\xc3\t(\x1cJ\x19\x9e\xb9.A\xf8V\xe7\xcf\x97\x8a\x95\x13\xf5\x80q7\x906\x97\xb9Hz\xd3\xee\xb6_\xdaB\x9b\x03\xb8\x8c\xa1\x02\xba\x13\x1f\xe6p\x9d\x89K> \x92Q\xb9D\x82\x19\xd1l4\xe2k\xf8&\xd8\x87\x1b\x92;\x90-\xc86a\xc2q\xd4y\xd9\x81\x91\x8d\xf8\xab+\xe8\xc7\x8b\x19J\x92p\r\xa6\n\xdc\x1c?A\xf7Z0\xcb\xbc\xe2^A%L\xf9/\xdew\x05\xd1!\x1a\xd6>\xf1\xd2\x9d\x81\xc9b\xca\xa0\x1d-\xca\x1e\x1eS\x1e\x99uv\xa2\xbe\xe7;o\x8cs+V\xbe\n\",\x9c\x1b\xdf1!\xdeU\xdc5 ^\x96oH\x85h\xceN'\xc1\xc0\x9f`:\x7f\xc3K\x9e\x01#\x91/#\xd89\xe7\x81\xd9\xbd\x1f\xf1\xe9>\x06u'\x7f1\xe6m\x964\x81k{D\x8f\xf1\x84~,\x96CdK\xb0M\xd2)*\x15\xab\x9c\xa9,\x133V>\xa8Q\x9c\x9f\x839\xb4\xfdg\xdb\xf9\xe2\xa6K\xe7\xd5\x08\xb6\xbb\x86y\xad\x1f\xb37\xb4a\xd7\x14\xa7\xc6l\x95\x83CF\xa7}QY*\x1eC\xecZ\x85t\xf5\xba\xf9Y\xcc\xd5]8\x8aP\xcb~\xa4\x0f\x8f\xd7\x92\xbd\x1f\x1a\xa6\xd0\xb4D\xe7\xcd\xadXn\xf8\x88\x08\xc2\xb5T\xeb\x0c\xd4\xcc\xe4\xf2\xd7\xb8\x8a>\xa0\x97\x0b\x9d\x9bxy6\x19\xa6\x1a\x94xW\xfb\xb2x\x7f\x8f\xfeN\xc44[\xfd\xf6\xe3r\x18L'\x01@QV\xde\xb9=M\x13\xd3#\x7f6Xr[\xeb8=}x\x14@r\xc6z\x9fbT\xc6\xc9\x8e\x9e\x1f|\x16\xdd`\xfb\xaa\x81#\xd6\xc0j\xbaX\xd9R\xddA\x16\xbaL\x989I\x9f\x0f\xa9M9\xc9\xbb\xef\xa0\xbf\xd0\x8a\x97_\x8d\x9e\xa3\xcb\xda\xe6O\xeeW\xa4\xf8\x82\xd7;&\x01\x06\x0cHI\xd5r%WM\x92\r\xbe\xf4\x12,\x08DA\xab^o\xff\xc1\xc7Q\x0e\xb8?\xa6r\x91r\xed)\x8a(8\xf1g\x82\xff\xa9\xfdD\x7f\xc1\xba\xb8\xf9d1z\xe9\x85t\x03\x0b\"\xe1=M\x83\xec\xe7\x87\xe4\xfe\x8f\xec\xf0\xa0\xfd\xbd\xe6\x91\xf7\xf8\xa8\xfd\xb0\xf60s\x9c\xce\xe4\x93\xa5\xa0l\x05\xa5\xd9\x8d\\\xee\xe0\xaa/\xfd\x99\x00\x80F4b5VC\xe8\xee\x8f\xa9\\\x9f$C$J\x87\xc5@?\x86b\xf5\xd6|\xfd\xc9\xd0a\x8boe\x9bw\xf0\x1bR!\n\x98\xdaX\xc7s\x06\x19\x89\xea\x17Q\xbf\xba\xf5\xe7KG>\xf8\xe2\xfb\x97\xce\x04\xdb\xb4cz\xd8\xc2\xf7Q*\xe3\xde\x1eI'G\xf5\xa8\xd1\x1dQ\x9c>\x05\x8b \xb6\xc8\x89G'\xea#\x8fF\xca\x1dI\xee\xb0\x98\xdd}\xed$\x9bs\xfc\x96s)\x8c\xeex\xbd\x1e\xb0\xb6c\xbd\xd3\xd1\xdc\x11k\xdft\xa8W\x8d`\xbb\x89\xdcN\xef\xb1!\x00\x00g'\xbd\xa9\xd8\x1c\xf1\xcf\x9f<\x12\x06\xec\xad\x08\xdb<\x9d\xfd*J\x9f&t\xe6\x07\xd7P\xdd%1\x94Q\x82\x05\x82\x80\xe8\x13>\xe7&\xaa\x83\xe0r\xaf\x8a\x95\x12j\xa2{\xc6\xa7SU\xef\xdc\x88\x05\xd4\x83\xc1\xbcU\x0f\xc5\x16\xbd2\xbb\x8c>\xa0\x97]S\xf3!5\xa2\\\xa5}s\xeek<}\xa0\xe6\xed\x81\xb6\x9f\x9d\xb1\x11\n\xd9\x95\xa1~F\tl\x0c\x89>7\xfc\xf2m\x02\x95\xf1\xf4cY\xbf\xdf\xc5\xbdX\xa2\xf1\x05\xd6y2M\x1b\xeb\x1c\x0b1\xf45`:\x993\xa1\xc2\xc9u[B-j`-\rV\xb6Tw\xc0\xc2!\xd3\xa3\xd3g\x83\x0e\xf1\xab3x\xaa\x8d`I\xb4>\xcd`\xaa!K\xf4\xa8~\x10\xe2\x05\x0b\x8e\x1f5\xef\xe1(\xca\x16\xbc%\xdc\x12,fYM:\x8e\x04b4\x81\xf3&z\xca'}t\xb6\x04ev\xdd\xb7\xaem;\x83\xd9Mz\xd1C\xbfH\xac\xce\r\x8cD\xc9U\x1a\x1c\x9c\xe2\xaf\xd2\xc1N\x1c\x8e\xb4m\xdc>\x12\x0e\x85\xe2\x00\xb0\x1d\xeb\x1dg\\ \x8e#F?l1l\xc2\xcc\xe9A\xa9\x90\x97\xa8\xc7Z\x9e\xb8,\xb0\xac\x08\x08k\x04\"\xd1L\x15Z\xc7?\xb7\xc68P\x88H\xd2\xa5\x9f\xa0[\x904\xfb\x83s\x9c\xf4#\xfe'C\x87-\xbe\x9dmg\x87\xfe:\x1c\\\x82GX\xa4\xc8uc\xe7\x9a\xee\x95\x18Xt%Z\x1f\\\x92q\xfe587j\xd9\x0f\x8c\xbb\x04\x87\xcf\xe6\xdfRiK\x92\x01,\xe6*\xa8\x80\x1fVX\x07\x001\x17s\xb1\xda\xfe*A\xc7\xe7\x92\xac=iHH\x9b\x8f\x8bH\\Dcmx0\xc3\xd0mX\xa7:\xbe\xd0\x11k\xdf\xf4N/\xa2x\xd5\x84\x99\xd3\xe9\x93cL\x14\x8f\x89\xd6n\xe7\xc2\xb0\xb6b\xf4J8#\x8c\x19'p\x02\xff\x82\x7f\x03\xd9|>a\xb47\x14\x94\x86\x06\xae\x02+?\x92\x97D\"p(0i\xf8\xdfG*\xd9\xc0,\xe49\xfeQP\x1aX\xc5\xa9\x9d\x06\x071\x1c\x87U\x91s\x90\x9c\x91\xf4\x9c\xb9!)R\x97\xa9u\xe1S\xf3\x87>\xac>2tf\x8b\x93qq\xc3\x00Gp\x1c\xdf\xaeZ\xc3\x1c\x17aw\xff\xb3\x91\xf2l\x1djb4\xe2K\x94`\x86\xa0\x08\x95\x8ay\xf1\x1a\x08\x04\xbcN\x9f\xdd8u\x1c\x9c\x16!{\xf8@\xfc\xe0h\xbd\xdede\x1f\xc7d&\xbdx7}\xbcwI\xc9\xb7\xf0\xab\xf1\\\x16W\x0b\x03\xd1\xb0GQ9\xa6G-lB)Y\xf9{I\n\x95\xa8;O\xfdE!=l1\xc0\x02\xbd\xd0\x9cI\x98\x9c8\xa2\x81\xe7=\x85\x84\xb4\x11Go\xe3\xa5F\xf2\xfdi\xc0qw0].\x83y\x17v\xe2\xe2\xe6\x93\xc5\xe8\xa3\x97\x12\x9e\x90\xb6\x84L\\\xfc(\xf1n\xf1\x9d\xe3?|\x93\xf7F\xdaw^\xb4\xbc\xae\xd1\xf6#l\xf3d\xd6\xb9\x1f\xe1\xe4&\xe4\xd8\xa1\xa0\x12\x9f\xc7aF\x17\xba\xf0\xe4\xfd\x87-\x04\x83\x9a\xe0N\x1e\xd2&av\xf2\xae#\xe7\x9e\xc2\xfd\x8eGpv6n\x80\x19\x9c\x9c*\xbd\xd9x\xa0\xbdm\x94og\xdb\xf8\xb9z\x1d6\x10K\xbc\xebSP\x1a\x1dwv\xad\x12\xb7HgaQF\xc9\xcdA\r\x80Q\x1a\xc8g\x8f+O\xf9hfOS\x9fo\xf13}\x1a\xacc~\xed\xd9g_\x89\xd8[Y\x83\x8e\x03`0(\xe7\x8c\xc3\x06\xa0\xa1K|4\xca*n\x1c8b\xe1\t\xc7\xd3\x067\xe9\xdb\x16\xec\xe9n\xde\xb0\xf2G\x98\x80\x85\x90\xb0\xc9\xc2U|\x07\xa1.\xfe8\xd2\xfe\xe8\xaeh\x18!\xcfA\xe6\xbfC\xfd\x0c \x86w\x9dO\xf1y\xbc\r\t\x80\xf3\\n8\x0c\xfa\xbc\x9c\x10\xfb\xb0\xc4\xa8p\x00\xeax{/\xadk\xfe\x96\xcf\x90\xf6t\x071M\x90\xf0Tr\xd9\xb9\xe2\x0c\x8b\xc1\xcb\xfb\xf7\xef9\x97w7]\x04\x83Zk\xd1\xe6\xa2\xe7\xe3;\xa7\x12\x9b\xba\x8f|\xdc\x83~{xr\xb4\xef\\O4\xe6\xf6\x8eB\xf8n\xcb\xd6\xean\xd5]\x95\xcf\x1e\x00\xf8\x94\xcf)Y^\xd4k^\xbc\xa84\xc6\x12\xb9M\x7f\xcfjY\xdar\x12\xd8\x9f_\xb2\x06\x88/-\x19\x93\x03\x00 \x14\xb2\x97\x07\xef\xd3\x9e\xde?|\xb2\x7f\xebS\x04\x00\x95\xa8\x10\xbb\x1f\xdcm\xe5\xf3F\x06\x82A\xed1 \xd2\xb2\xf4K\xde\x97!I\xc8\x10P\xb9\xe1oy\x9b\xae\xd3\xb5[]\x8f\xa3\xfa|F^\xd7:\x00\x89C\xb4\xe0o\xf7\xeeg\xb4)\xe7z\xfa\x0f\x15\x1e\xd7\xd3\x7f\x98\xf8#\x91\xdf7\xfc\x91\xc8\xef\x1b\xfe\x17:\x17\x1d\xc9\x88\xdf\x9b\xbc\x00\x00\x00\x00IEND\xaeB`\x82"
red_icon = b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x002\x00\x00\x002\x08\x06\x00\x00\x00\x1e?\x88\xb1\x00\x00\r{IDATx\x9c\xed\x9a{p\\\xf5u\xc7?\xe7w\xef\xdd\xbdk=X\xc9+\xd9z\x19\xd9\xd8\x06lBp\x80\xd4\xc2\xaf\x15\xaf\x90\x96\xc2\x84\x02\x85\x89;\x93IKf\nM3MyL\xfb\x07%C\xc2L\t\xd3\xa4\xedL:\x93\x92\x00CZ\xa6@\xc3k\x02\x98\x97e\x1b?\x821%\xd8u\n2`K\xb2lK\xb2\xb4\x92\x16i\x1f\xf7\xfeN\xffXIX\xda\xbb\xb2\xd3Ig2\x99\x9c\x99\xab?\xb4\xbf=\xe7|\x7f\xe7\xf7=\xe7\xfc\xce]\xd9\xb9\xfde~\x1b\xc4\x9d\xffc\x119\x8d\x02-\xfd\xd5\xff\xbb\x0b\xbf\x1e\x1b\xf3\x02\xe9\xe8X\xeb\x0f\x1b3\xef\x9azk\x83\xdd\xbbwO\x9e\xc6\x97\xffw\x1b\xf3G\xe4\x9ak\xbc\xd4\xe8\xa8\x0bgUX0J\xec\xac\xb3\x9c\xad[\xb7\x16\xe9\xea\n\xe6w\xb9\x82\x03\xd7_\xef\xdbC\x03Bm%\x1b`\x83n\xe1\xbd\xbeymD\x02I\x83\xfb{\xeb\xd6%\xfe\xfe\x8d\xb7\xbfyD\xedU!f\\\x90Yk\x15\r]\xd4?\x89\xf9p\xcd\xca\xce;\xbd\xf4\xd6\xb1\xae3\x06#\x92Z\xb7\xb2\xfa\xbc\xf3\xd6\xf3n\xf7\xc0?'\xd16\x8b\xe4@\x9c96\x02\x0f\xad\xd9\x8dl\xdf\xf0\xc0]\x0f:\xfc\xc1x\x17D\xda\x88\x04\x92om\xf5\x9c{\xee\xa1Y\xb9\xb8\x86\xf02\xc5\x1b\x02\xe3\xcf6b\x10\xc0\x87\x8d\xf7t\xefy\xf6\xfemO\xbcVE\x13\x95\x0c\xcd\xc6\x01\xbdNm\xf2'\x1c[\xb6\x18\xfbe\x8fDF\xe7lT\xc9\x86\x04\x06\x9bl%,\xda\x7fx\xbc\xa5\xe9\x9f\x1e\xfb%\x03O\xbat\x95\xdb0\x11V\xe4h{\x9d\x7f\xd5\x83?H\xb8\xd0\xa2,8n!k\xb1#\xa7>J0\x12\x12\x0e8\xc0\xb5j\xd6\xfb\x8f\xbf\x99*\xa6R\t\x81\xd3q\x97\xb4\xaasK\x18\xcb\\$\xce\r.N.\x84\xe1\xb9\xfa-v\x04\x8a\x19E\x8e\xbbP\xbbzx4q\xb4\xa3#\x96&\x1d\xa9\xb3\x1c\x88@\x8f$\xfd\xab\x1dg\x91\x83\xbbT\xb1E \x068s\x1f!\xf4\x94`\xa8\x1d\xef\xca\xb6\xc7~\x9c\xdc54\x94\xd5\xe9$SQD\xde\xde\xb0\xa1n\xb3[\x93J\xaa\\\x07\xf1\x0c\xa8\x1f\xa5_11\x8b\xb51\xa4i\xa3u\x1amc\xa3WIkDD`T\xf2\xfer\r[\x1c&} \xac\xec\x94q\x80l\x02Y\xf3\xad\xa2\xd7q\xd9\xc1\x83u\x1d\x90\x98\x1f\x07\xec\x91\x9c\xffG\xc4\xae\x8eQhWln~\xe0\x84\xe0->_HaL\"\x7f\xe8\x90\x17\x15\xf5H \xbdh\xd0\x80Yj\xc0\x8f\xfa\xfcTQ@\x90\xdc\xc5\xaa\x1bx\xe2\xa7u\xb4\xb62\xdf\xf1\xeaX\xbb\xd6\xbf\xed\x8a\x8e\xd1\x16\xd5\x1b\x0c\x0b\xb2Z\xda\xfdy\x81\x08!m*\x8b\x8c\xaaO_\x1fQQ/\x03\x92\xd6\xad\xce\xf7\xc2X\xa6\x16w\x85\x10;\x1d\x0e\x80\x98b\x87\x1bp:o\xd9\xb6\xabu\xbc\xaf/\xacx\xbcD\xe4\r/H=\xf1z\xf7\xe7\x16`7Z\x18\xe1\xf4@\x10\xa0\x91\xb0A\x06G}\xe8\x8b\\3\x07\x88H\xbeu\xb3w\xf0\xf6\xdb%\x81.\x057w\x06;\x86B\xc1E\x9a7\xc3\xba\xfa-[\x16\xaeK\xa5j\xa2\xa2\xd2\xa1\xea\x97H\xee}\xc9%\xe6\x0bv\x9ec;#\x8e\x12#%\xee\xd9\xf6\x83\x03f\xb7\xb4E\x1e\xc5\xb2\x88\x1cm\xaf\xf3\xd7\xff\xcb\xe3~\x0c\xb3\x0cl\xf6\x0c\x0c\x018\x82d\xcf\xc7\xbd\xdc\xfe\xe8\xc9Z\xef\x82\xa1\xc9\xf2\xa8\x88\xec\xdf\xb0\xa1\xfaF\xb7&\x95Ts\x9d \xc7\x15{\xdaM*I!\x93P\x9a\xab\x0e\x1cv;\xd3\xf79\xa4\xd3e\xa9z6\x90\xa9\x8cu\xa3\x91\xc5.f\tP\xe0\x0c\"\x028\x16;R\x8b\\|\xdf\xf1\xc1\x0b\x82\xa7\x87\x12\xe9\xb95j\x8a\xe4_\xc6\xb9:Fn\x8a\xe4\xe6\x8ct\x0b6\xe7\xe14\xae\x87\xba\xec\xadM\xb1t\xc4\xa2\xb2\x88\x9c\x90\xbc\xbf\nY\xe60\x99\x9c\x02r\x86bC\x83\x97\xfc\"\xc1\x15\xfa\xdcs\xf5\xa5\x9a2\xdd\x0f\x8at\xac]\xeb\x7f\xfd\x8ak\xc7[\xd4\x9c)\xc9?\xd5\x8c\x14]\xb4n\x156\x19s\xea\xfc\xa8\xcc5\x0bHz\xebV\xa7\x07\r\xea1\xed\x91\xe9l^1\x8e\x12\x0c\xb5\xe0\xae\xbf\xe4\xdf\x9eJ\xb5\x0c\rM\xe8t\xc7*\xf0\x86\x17\xa4\x1ey}\xcfE\t\xdc\xab\xcf\x94\xe4\xd3\"\xd8PpS\xab\xf1\x9a\xa4*\xf4\xe9+'\xfc,\x7f\xf3\xe9\xe5\xde\xdd'\xabF\xaa\x91s\xe44\xe5 B\x1c \x1b\xc7\xf9\xcc7\x02\xf3\xf9\x9e\xb7\xdeJv@B\x10)\x91|,s\x91x_\xf2\xa6\x1c\xfbU\x14\x97\xda\xa1\x90v\xb5\xcd\x9a\xcf'J\xff\x9b\xcd\xc1S\x80\x88\xd0q\x13\xc5k\x7f_|\xcc\xf2\xd3d\xacHG\xb4D\xfa\xdc\xc5\xe2v:\xcf<SGk+\x08\xec\xdf\xb0\xa6\xfa\x8f\x9d\x15\r%\x92\xdb\xe3Jd^\x0f+\xe9-\xe9vX\x88m\xa0\xbf\xdf\x8b\xd3U\x9c\xfb\xf9\xac\x88\x1ct\x1c\xff\x96]\xaf\xd7\xc4\xd0%B!C\x05 \x82['h\xd4\xe9s\x14;\xbcPe\xc3\x9f\xec\xfa\xc5\x12\xbf\xefM]\xdb\xdb\xeb\xef\x11\xd7\xbfE\xf4\xaa\x12\xc9%\"}\x1a\xc0\xa9)=\x91\xe2\x80C\rN\x13\x1f\x1ew\xef\xb8\xf9\x07\xf3\x14D\x81Q\x11\xff2\x91&\x83,Q\xa4\x0c\xf5\xd4\xc2\x05#\xe4_\x0b\xd0c\x12\xb1\xb3\xa5\x9ab\x16oV\xb3\xa9\xf0\xd4\xde\x85\xb2iS\xcd\x9f\xaf\xbb2;\x0f\xc9CA\x17LRx+G\xe1\x1dA\x16\x10\x11\x19%\xc8$\x90\xa6\xb6\x0f>\x8e}\x8b\xd5e)x\xd6\xae\x9e\x90\xbc\xbf\x0c\xd3\xe6\xa0\xd5Q\xca\x80\x82C\x98|\x99\xf0\xc5\x1e\xd8f\xb0)\xca3\x9b\x03Nv%\xb2\x9e\x87\x7fT\xb3\xabea\xd5\xa3\xbb\xfe{\xcd\x02\xecF\xc5\x0e\x11\x01\xc4\x10&_\xc2>\xd3G\xf8\x8e!LR\xce!G\x08'\\L\xdb&\n\xf5\xc9\xcdm\xf1\x8eC\x87f5\x903@\xd2[\xb7:\x1fh<\xd7\x80,5\x95\xb3\xae\x13Bn\x10;\xf03\x82m!a.\xc21\xc7\x12\x8cT\xe1]\xf6\x8f\x93\xeeE\xeb\xb7w\xe5/\x85\xeb]\x9c\xc8\xbe\xcd\xa0~\x01\xa7\xfb/\x91\xbd\x16w\xd2\xcevkF\x14B\x07S{\xbex\x0bM\xbe\xc6\x07f\xf5t3\xdf\xc8\xa7\xd3\xde\xbd\xc3\xc3\xe3\xd5\xc8\xb2J\x19K\xc0\t\x91L\x0f\xee'\xf7\x9d\xbb\xf4\xfdI\xdc\x9f\x0b\xa6\x8e\xf2\xe8\x85\x06\xf57\xc2e\xf1+nX\\\xaf\xce\xb5\xa5J^v\x14\x0b\x8aY\xdcK\xfe\xb9\xc2]wxc\x84#Sv\xa2l\x87\x82V\xafPm*\x8e\x16\xe2s\x9b\xc7) \"tt\xc0m\xb7\xb9>\xcerA\"\xcf2\x10\x0ba\xe0\x800an\xff\xb3\xd1\xe3\xd8\xa7\x95\x89j)\x07\x12S\x9cl\x03\xce\xe7^-\x9a[\x1d\xdcf\x1b\xcd\xb9X\x08\x99\xff@\xde\xd4l&3J\xf8Q\x88\x03\xd8\xb2\x85:\x05\xb0\tm6\x85\\Y\xf38\x13\x91\xfdn\xae\xfa\x86\xe7^\xa9\x8e\xc1R\x08\xb3Df,\xaf:\x0f\xfdo\xc7\xbd\x89\xfc\xde\xbd\x99\x17\x85-\x05b\xfdQ\xa4\x87`\xcc\x87sV\x11\xfb\x8aR\x1c.\xd7g\x0b\x06S?J\xb0\xe5\xa1\xc6\xa6\x9ep\xff\xe1\xc1\xa2\x89\xf5[\x8aY\x8dh]\x84R\nN\xe2,\xd6#\x87\xbd\xb9\xcd\xa3\x99^\x95\x15\xd7\xff\xa2:m\x0ez6\x91)\x12@\xfdI\xc2\x13\xac^\xc5\xdd\x8f\xbd\xa6\x0f\x0c}tl\x14\xfb\x82\"\xcd\x12\xd1\xce(b-D\x8eq\x04\x83\xc5\xf8o\xc2\x16\x96.*&\xe2\x85\xd1\xf7\xc4\x19\x0c1C\x06-\xbb\t\x96j\x14\xd9*t\x91tw;s\x9b\xc7\x99\x88\x9c@\xdc\x16e\x89\xa1\xe0W\xb8\xab\x86\x102\x84\xf4R\x9f\n\x1bbU\xfa\xd2\xc2\xaa\x86\xfd\xe8\xb3\xc1|\x97\xc8\xe8Z\x14\x82$')l\xfb\x9a\x84\xef\xca\x9e\xb7\x87\xfb_y%\xf1pUq4\xc4\xf6(^T\xd6t\xa0\x98\xf5\x91\xa65C\x99\xaa\xc2u\xb5^\xfa\x94\x0f\r\x942\xd6\xbb\x1a\xcf\x9d\x85,\xadT\xca\xa7\t\xd8C\xd8/\xf1b!\xcd\x91\xe0\xb3\xa17tk\xdb\xd9?\xcf\xc36\x90d\x84\xf1J\x12B\x98\xec\x16}-\xb8|\xbd\xb6\x07N6\x05\x9c\xbc\xe3\x8e\xb0\x88\x19\x06\x1b9\xdd\xb18\xd6\xc54u@\x83Y\xb9\xd2\xcf\x9f\x92\x82\x8d B:\xcd\xfd;vdkU\xcf\xa9t\xe5\xd6R\xd5\xce\xf4\x883\xac\xc5b.\xbd\xf5^\x9a\xbe\xf3\x9d\xc9\x07z\xf6\xfb}\xd8\xffT&\x93\x11\xa4\x8f\x14\x83\xfa!t\x7f_y\xd3\xf4\xf4\x8d]\xdfV\xfd\x89\xdd\xb93h\xfc\xf6\xb7u\x12{\x18\x02?Z\x97\r\x05S}\x9e\xc8\xc2`l,6['pl\xdd\xb9\x89p\xf3f\x89\xc32p\"[lA\xbd\x10\x19\x7fW\xf5\xa4\x1d\x1c\xcc\x91\xbe\x8fm\x9d\x9d\xe1\x17\x98\xe0y7|\xa5\x80_\x81\xf4eRP\xbc\xc5\xfd\x12\xbe\xfa\xfc\xdaK\xc6V}\xd47v\xd7\xc0\x80\xb7[$w\xbb1\xd5\x05d@+\xd7\xb1PP\xbfM\xddE\x92\xcf'L_\xdf\xa7\x1c\xd1\x9b\x9f4G\xcd\x02\xff\x1bGO\xd6\xbb8\xcb\x84bT\xc6\n\x15\xd7\x0f\xd1\xe3{\x8c\x19u\x07\x0b\x85\xc3\xe0\xa2\xf0\xd9\x1d\xfb2\x0f\xbe\xb7\xb7\x7f\x94\xe0\x05(\xd6G\x91~\x8e8\x8a\xcd\xbe\x8c\xb7],\x13\x17$\x82\xf1\xc3SC\xbd\xf3$\xefg\x08z\xe7\x9f'9,F\x9b\xcc\xe8d\xdc\xa3k&\x91\x18x\x8a,\xd5\xeeE\xd6iv\xb0\x8b+\xf5X\x82\xf1sp\xa2\xb7qa\xb1\xa9\x7f\xa8\x08\xa0\xa8\xee\x16\xc9=\xbfjU\xf2 \xfal\xb1B\xf5>uC\x04\xd3\x90\xa5\xd8\xf57\r\xa9\x0f\x92\xfb\xde\xca|}b\"\x9c\x9e\xe9\xd6\xe0\x07#\xe2\r\x84$\x88\xaa%Lu\xd7u\"g\xd3\xdd\xedvI\xe7\xcc\xf13\x0c\xae\x96~\xc9\xb9\xad\x1a.1\x14\xe6\x99c\xa9\x9f\xc5\x1egE;\xab\x19\n\x0eO\x8fF\x15:\xc20s\xf3\x14\xe9\x057UIG\xe9\x1e\xa2\xfe^\xf4E\x96\x9f\x1d\xac\x8a\x05\xe3\xed\xa7\\\x89\xeb\x99d\x80`\xb0\xd4!G_\x83\x95 \xb7@M\xa3\xb3\xff}\xd3\x99\xee\x9cI\xc1\xa6\xe3\x81?\xf5>T\x1b\xd4#\xcb\xe6\xb9\xb2\x95R\xafpT\xfc\xda\xe2\xaa\x86\xd4)\xdb\xa5:\x9b\xf4\xd9\xa8JO\xa9\x114\xd5\x05\xec\xbe\xbf6\xe1\xdb\xf6\xbdwG\xbe\xbb\xe5\x95\x89\xc3]]\xb9\xe9\r\xa9\xd6 \xf7\x0ev($\xe8\x95R-\x89h\x1em.\x866]\xa3Z\xcf\xed7\xfai@\x101\xa6\xa3\xd5\xbdw\xc7\xbe\xf1\x1ad9\xf3\x84\x14\xa0Gm\x9f\xda|\xfe\xa6\xa7\x9e\x9a5\xe2\xef\xea\xec\x0c7\xcc\x90>\xd6\x1bMz\x13\x82\xa4>\xc6\xbe\xda\xbb\xf1\xb2`\x8d\xc9\x7f\xd2\x9e\xde\x14?uE\x8b]\x90\xfba\xc1\x8c\x86h/\xa5ZR\xbe\x1dH\xd1\x10o\xbe\x04\xd389\xd9\x14\x9fN\xc1fl\xfdg\xdc\xdc\xe6\xcd&\x8e\x9c\x03\x12\xd9\x1e\x80\xc5B\xe6\x10\xce\x88A\ni\xd5\xd9kT\xb5c\xc7\xbe\xcc\x83\xef\xbd\xd4\x9f\x81\x17\xa3*\xbd@\xcc\xa2\xfd\xff\x8a\xd3E\xcf\xe0\xd8\xa2O&fH>\xad\xa4\xfe\xc8\x91\xc0y\xf4{\x1a\xc0\xa0B$\x10\xc5`P\x7f)\xa4\x1c\x82\x19N\x9a\x0fH4\xfcm\xef\xd0B\x0f\xb3J\xb0cD\xa6^\xd7S\xc2\xe1\xbd\xe8\xc9`d,O:]f\xa0D\xfaK\x93\x07\t\xa3*}A\xb0\xf5#\x84[\x1f\xb9p\xe5`\xcbG\x87\xc6\x1eQ\xeb\xce}q\x13\xef\xfbI\xf1\xdc\xaf~\x95\t8\x02\x05\xa2\x8ehi\x10\x11\xd2\x8cYLndj\x10\xa1\x98\x8c\xd8\xe4\x85\xb8M\x0e\xa4\x14\x1b\x95:CE\xfc\"r|/:\xee\x1f\xe9\xcf\x1f\x06\xb7l\x92\xa8\xd0\x11\xc6\xa6H/\xdb\xe7Tz\xc7\xe2\xf2*v\x0b^|r\xb5\xb3hN4\xa6\xa4\x0b\xbebLuAt\xb0R-\x11,\x8aC\n\x9au \x13\x8bwu\x15\x15\xd4\x9c\xc4\xa3Qiq)\xe4\x14\xc7\xf2\xe9\x10`\xea\xb1EA\xddI\xb1'F\xda\x9a\xc3\xb6\x89\xfe\xa9\xd4;w\x92x*\xe9\xc3\xa7\x950I)\x95\x17\x04\x12\x13\x14w\xfd\x85\x13\xdb\xef\xee\xdb\x9b\xf9;\xfd8\x88z\x8d\xd6\xd5\xd9\x19\xae\x94\xbc\x7f\x12\xe9U\xc8)R\xe6\x8fb\x800S\x8dm\x95\x03\x07\x9c\xc6\xc1A%\x9dv\xcd^\r3\x8d\xc8r\x0f|\x83\xd6\x1aL\xdd\xec\x87Z\x8f\x89\xeaq\xd5>V\xae\xe0\xf2Bs\x18\xb9\x9bS\x8eLW\xfa\x003\xe4\xe06\x0bT\xbb\xe4R\xef\xc3k\xa4/\xa5C\xe3\xd9\xf6y\xde]\xfa\xc0\xa8\x06C\x80\xefb\xea\xe7\xfa#\xb8)\xc1IV\xe3.]}<\x938x\xf0\xa0\x93\x06\xdc\x87~\xf8\xe8\xd0MB|T\xd9^ \x9c\x14\xc2YG\xc6bl\x0c\xa7\xe6\x17\xf0?\x1a\xe4\xf3\x0fp$\xa8\x90\xd9@U?\xbfc\xdf\xe0'o\xfcx\xf4\xbf6~\xed\xe1\x06\xec\x06E\xb3\x05b\xc1\xfdZ\xdcA\xe3G#\x0f\xeex>{\xb8\xab\xabb\xf1n\xd20\xf7S\x8f\xbe\x0b\x03\xef\x8d\x18\x85\xa2\x8d|\x17\"\x04(\xcb\xac\x9e\x95lk\x8b\xeb\xb1c\xc8\xce\xed[d\xdd7\xff\xca\xd7\xfe|\xbb\x14\xc6\x1d1\xa6\xcc\x88\xba\xae\xe8\xc9\xe1\xd0+Ld\xb7m{\xb9\xb7\x92\x133\x92N\xbb\x97\xdeyg,\xf6\xef/,!7\xe9\x8a\xef\xab\x9e\x1c\x0e\xeb\xbc\xdc\x89\x03\xd9\xec\xe4L\xed\x98G\xd6\xdduW#G\x8e-\x12\xebV\xd850\x99\x01uj\xe2\xfd\x85\x81\x81\xd0%\xbd\xc9\xd9\xc9;\xc5/Hgw\x8c_VT\x1c\x07\xcc\xe5\x9bN\x8b\x01\x80\xae\xae\xa0*\xfd\x10\xbb\xb6\xfd\xe1\xfb\xe9t\xa7\x03\x90nH\x99\xfb\x9e\xfcY\xf10\x95\xa31#\xe9\xb4\xbb\xb3\xeb\xbb\x03\x9d\x9d\x97\x0f\xcf\xb7lev\x85\x8c\xdc}\xa5}\xd2\xf3Df~\xc2\x111\xaa\xaf\xe4\xe4\x19\xad;\xc5\xa9_\xcbwO\xe3\x93\xfc\xb6\xfc\x16\xe5W\x1f\xba\xff\x86\xca\xef\x80\xfc\xa6\xc9\xef\x80\xfc\xa6\xc9\xff\x02\x1d\xf0<Plb\xfa\xd3\x00\x00\x00\x00IEND\xaeB`\x82"
class Tray(QMainWindow):
def __init__(self, parent=None):
super(Tray, self).__init__(parent)
self.tray = QSystemTrayIcon(self)
self.green_status()
# Menu
menu = QMenu()
option_show_hide = menu.addAction('Show/Hide')
option_show_notification = menu.addAction('Show Notification')
color_submenu = menu.addMenu('Change Status')
suboption_green = color_submenu.addAction('Green')
suboption_red = color_submenu.addAction('Red')
option_quit = menu.addAction('Quit')
option_show_hide.triggered.connect(self.show_hide)
option_show_notification.triggered.connect(self.show_notification)
suboption_green.triggered.connect(self.green_status)
suboption_red.triggered.connect(self.red_status)
option_quit.triggered.connect(self.close)
self.tray.setContextMenu(menu)
self.tray.show()
def show_hide(self):
return self.hide() if self.isVisible() else self.show()
def green_status(self):
self.tray.setToolTip('Tray Application\nStatus: Green')
pixmap = QPixmap()
pixmap.loadFromData(green_icon)
icon = QIcon(pixmap)
self.tray.setIcon(icon)
def red_status(self):
self.tray.setToolTip('Tray Application\nStatus: Red')
pixmap = QPixmap()
pixmap.loadFromData(red_icon)
icon = QIcon(pixmap)
self.tray.setIcon(icon)
def show_notification(self):
self.tray.showMessage('Title', 'Body', msecs=500)
app = QApplication(sys.argv)
tray = Tray()
sys.exit(app.exec_())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment