86 lines
2.9 KiB
Python
86 lines
2.9 KiB
Python
|
import PySimpleGUI as sg
|
||
|
from notifypy import Notify
|
||
|
import tempfile
|
||
|
import base64
|
||
|
import os
|
||
|
|
||
|
"""
|
||
|
Demo of Notification integration with PySimpleGUI
|
||
|
|
||
|
You will need to install the py-notifypy package (note spelling!):
|
||
|
pip install notify-py
|
||
|
|
||
|
Displays an OS created notification
|
||
|
|
||
|
There are more options than those in this Demo... like all PySimpleGUI Demo Programs
|
||
|
the demo is meant to give you a starting point
|
||
|
|
||
|
For more info about the notifypy package, visit the project's GitHub
|
||
|
https://github.com/ms7m/notify-py
|
||
|
|
||
|
To show a notification, call the function provided: notify_popout
|
||
|
|
||
|
If you use a base64 icon, then a temp file will be created. If you wish to cleanup these
|
||
|
temp files (an optional step), then include this line of code when you close the window:
|
||
|
[os.remove(file) for file in notify_popout.temp_files] if hasattr(notify_popout, 'temp_files') else None
|
||
|
|
||
|
Copyright 2021 PySimpleGUI
|
||
|
"""
|
||
|
|
||
|
|
||
|
def notify_popout(title=None, message=None, icon=sg.DEFAULT_BASE64_ICON, app_name=None):
|
||
|
"""
|
||
|
Show a notification popout window
|
||
|
|
||
|
:param title: Title shown in the notification
|
||
|
:param message: Message shown in the notification
|
||
|
:param icon: Icon shown in the notification - defaults to PySimpleGUI icon. Should be a PNG file
|
||
|
:param app_name: Application name shown in the notification
|
||
|
"""
|
||
|
if not hasattr(notify_popout, 'temp_files'):
|
||
|
notify_popout.temp_files = []
|
||
|
|
||
|
notification = Notify()
|
||
|
notification.title = title
|
||
|
notification.message = message
|
||
|
tmp = None
|
||
|
if isinstance(icon, bytes):
|
||
|
with tempfile.TemporaryFile(suffix='.png', delete=False) as tmp:
|
||
|
tmp.write(base64.b64decode(icon))
|
||
|
tmp.close()
|
||
|
notification.icon = tmp.name
|
||
|
elif icon is not None:
|
||
|
notification.icon = icon
|
||
|
if app_name is not None:
|
||
|
notification.application_name = app_name
|
||
|
notification.send(block=False)
|
||
|
if tmp is not None:
|
||
|
notify_popout.temp_files.append(tmp.name)
|
||
|
|
||
|
|
||
|
def main():
|
||
|
"""
|
||
|
A little test application that demonstrates calling the notify_popout function
|
||
|
"""
|
||
|
|
||
|
layout = [ [sg.Text('My Window')],
|
||
|
[sg.T('Notification message:'), sg.Input(key='-IN-')],
|
||
|
[sg.B('Show Notification', bind_return_key=True), sg.Button('Exit')] ]
|
||
|
|
||
|
window = sg.Window('My PySimpleGUI Application', layout)
|
||
|
|
||
|
while True: # Event Loop
|
||
|
event, values = window.read()
|
||
|
if event == sg.WIN_CLOSED or event == 'Exit':
|
||
|
break
|
||
|
if event == 'Show Notification':
|
||
|
notify_popout(title=window.Title, message=values['-IN-'], app_name=window.Title)
|
||
|
|
||
|
window.close()
|
||
|
# enjoy the anti-pattern that cleans up the temp files
|
||
|
[os.remove(file) for file in notify_popout.temp_files] if hasattr(notify_popout, 'temp_files') else None
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
main()
|