From 289d7358d2f97cfe668438328db6839cc99e36fe Mon Sep 17 00:00:00 2001 From: Phil Howard Date: Mon, 1 Jun 2020 13:06:12 +0100 Subject: [PATCH] Fix text alignment, output channel settings --- examples/display.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/examples/display.py b/examples/display.py index 38dc955..21ca34c 100644 --- a/examples/display.py +++ b/examples/display.py @@ -61,7 +61,6 @@ class Channel: def update_from_yml(self, config): if config is not None: - print(config) self.pump_speed = config.get("pump_speed", self.pump_speed) self.pump_time = config.get("pump_time", self.pump_time) self.alarm_level = config.get("alarm_level", self.alarm_level) @@ -73,6 +72,15 @@ class Channel: pass + def __str__(self): + return """Channel: {channel} +Water level: {water_level} +Alarm level: {alarm_level} +Pump speed: {pump_speed} +Pump time: {pump_time} +Delay: {watering_delay} +""".format(**self.__dict__) + def water(self): if time.time() - self.last_dose > self.watering_delay: self.pump.dose(self.pump_speed, self.pump_time) @@ -104,7 +112,7 @@ class Channel: draw.rectangle((x, 2, x + 15, 17), self.indicator_color(c, self.label_colours) if active else (129, 129, 129)) if selected: - selected_x = x + selected_x = x - 2 draw.rectangle((selected_x, 0, selected_x + 19, 20), self.indicator_color(c, self.label_colours) if active else (129, 129, 129)) # TODO: replace with graphic, since PIL has no anti-aliasing @@ -116,7 +124,9 @@ class Channel: fill=self.indicator_color(c, self.label_colours) if active else (129, 129, 129)) # TODO: replace number text with graphic - draw.text((x, 2), "{}".format(self.channel), font=font, fill=(255, 255, 255)) + + tw, th = font.getsize("{}".format(self.channel)) + draw.text((x + int(math.ceil(8 - (tw / 2.0))), 2), "{}".format(self.channel), font=font, fill=(255, 255, 255)) def update(self): sat = self.sensor.saturation @@ -255,11 +265,19 @@ def main(): settings_file = sys.argv[1] settings_file = pathlib.Path(settings_file) if settings_file.is_file(): - config = yaml.safe_load(open(settings_file)) + try: + config = yaml.safe_load(open(settings_file)) + except yaml.parser.ParserError as e: + raise yaml.parser.ParserError("Error parsing settings file: {} ({})".format(settings_file, e)) + for channel in channels: ch = config.get("channel{}".format(channel.channel), None) channel.update_from_yml(ch) + print("Channels:") + for channel in channels: + print(channel) + while True: update() render()