#!/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 def run(self): while True: self.target.update() try: time.sleep(10*60) except Exception as e: print(e, e.args) 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.fullscreen() self.args = args self.image = Gtk.Image() self.window.add(self.image) self.image.show() self.window.show() def destroy(self, data=None): Gtk.main_quit() def main(self): self.updater = Updater(self) self.updater.start() Gtk.main() 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 def image2pixbuf(self, im): buff = BytesIO() im.save(buff, 'ppm') contents = buff.getvalue() buff.close() loader = GdkPixbuf.PixbufLoader.new_with_type('png') loader.write(contents) 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()