Add Python picture.py example
This commit is contained in:
parent
389e6a108a
commit
4438709a99
94
examples/picture.py
Executable file
94
examples/picture.py
Executable file
|
@ -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 <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
'''
|
||||
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()
|
Loading…
Reference in New Issue
Block a user