#!/usr/bin/env python3 # -*- coding: utf-8 -*- import gi gi.require_version('Gtk', '3.0') gi.require_version('GdkPixbuf', '2.0') from gi.repository import Gtk,GdkPixbuf from io import BytesIO import argparse import threading import time from datetime import date import requests DEFAULT_BASE = "https://www.agp8x.org/temp/new/pchart/" def today(): return date.today().strftime("temp_%d.%m.%Y.png") class Updater(threading.Thread): def __init__(self, target): threading.Thread.__init__(self) self.target = target self.exit = threading.Event() def run(self): while not self.exit.is_set(): try: self.target.update() except Exception as e: print(e, e.args) self.exit.wait(10) class Window(object): def __init__(self, args): self.window = Gtk.Window() self.window.set_title("weather") #self.window.set_default_size(150, 150) self.window.connect("destroy", self.destroy) self.window.connect("key-press-event", self.on_key) self.window.connect("button-press-event", self.on_click) self.window.fullscreen() self.args = args self.image = Gtk.Image() self.window.add(self.image) self.image.show() self.window.show() def destroy(self, data=None): if self.updater: self.updater.exit.set() Gtk.main_quit() def main(self): self.updater = Updater(self) self.updater.start() Gtk.main() def on_click(self, widget, data=None): self.update() def on_key(self, event, data=None): self.destroy() def update(self): filename = today() url = self.args.base_url + "/" + filename new_image = self.fetch_image(url) self.image.set_from_pixbuf(new_image) def fetch_image(self, url): response = requests.get(url) with BytesIO(response.content) as buff: loader = GdkPixbuf.PixbufLoader.new_with_type('png') loader.write(buff.getvalue()) pixbuf = loader.get_pixbuf() loader.close() return pixbuf if __name__=="__main__": parser = argparse.ArgumentParser() parser.add_argument("base_url", nargs="?", default=DEFAULT_BASE) args = parser.parse_args() window = Window(args) window.main()