From 4438709a990d85f9658a744bc51a6ca4e3571432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Wed, 18 Nov 2020 16:20:48 +0100 Subject: [PATCH] Add Python picture.py example --- examples/picture.py | 94 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 examples/picture.py diff --git a/examples/picture.py b/examples/picture.py new file mode 100755 index 0000000..8b5291f --- /dev/null +++ b/examples/picture.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python3 + +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +''' +Display random picture from unsplash.com in a popup + + * Click : open/close popup + * ScrollUp/ScrollDown/Double click : display next picture + * Right click : exit +''' + +import urllib.request +import sys +import signal +from genericmonitor import * + + +def signal_handler(sig, frame): + sys.exit(0) +signal.signal(signal.SIGINT, signal_handler) + +class PicturePopup(GenericMonitor): + + def __init__(self): + self.scrolling = False + self.item = None + self.imgs_idx = 0 + self.setupMonitor() + self.display_next_img() + self.runMainLoop() + + def display_next_img(self): + filedata = urllib.request.urlopen('https://source.unsplash.com/random') + # Get redirected URL without parameters + url = filedata.url.split('?')[0] + filedata = urllib.request.urlopen(url + '?fit=max&width=500&height=500') + datatowrite = filedata.read() + with open('/tmp/cat2.jpg', 'wb') as f: + f.write(datatowrite) + widget = GenericMonitorTextWidget('#%d' % self.imgs_idx, 'color:purple') + url_widget = GenericMonitorTextWidget(url, 'color:white;font-weight:bold') + picture_widget = GenericMonitorPictureWidget('/tmp/cat2.jpg') + popup = GenericMonitorPopup([url_widget, picture_widget]) + signals = { + 'on-click':'toggle-popup', + 'on-dblclick':'signal', + 'on-rightclick':'signal', + 'on-scroll':'signal', + } + self.item = GenericMonitorItem('picturepopup', [widget], signals, popup) + group = GenericMonitorGroup('PicturePopup', [self.item]) + self.notify(group) + self.imgs_idx += 1 + + def _forMe(self, sender): + return sender == self.item.getFullName() + + def _onScroll(self, sender): + if not self._forMe(sender): return + if self.scrolling: return + self.scrolling = True + self.display_next_img() + self.scrolling = False + + def onScrollUp(self, sender): + self._onScroll(sender) + + def onScrollDown(self, sender): + self._onScroll(sender) + + def onDblClick(self, sender): + self.onScrollUp(sender) + + def onRightClick(self, sender): + if not self._forMe(sender): return + if self.item: + self.deleteItems([self.item.getFullName()]) + self.stopMainLoop() + +picture = PicturePopup()