Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from PIL import Image, ImageDraw, ImageFont
- import time
- import os
- from datetime import datetime
- import math
- __author__ = "vk.com/id411779952"
- # Все права под защитой Летающего Макаронного Монстра
- class Timer:
- def __init__(self, x_size=160, y_size=21):
- self.x_size = x_size
- self.y_size = y_size
- texts = ['yandex', "яндекс"]
- rows = []
- for text in texts:
- rows.append((text * int(math.ceil(x_size / len(text))))[:x_size])
- grid = []
- for y in range(max(y_size, x_size)):
- grid.append(rows[y % len(rows)])
- self.grid = grid
- @staticmethod
- def _decl_of_num(number, titles: (str, str, str)):
- cases = [2, 0, 1, 1, 1, 2]
- if 4 < number % 100 < 20:
- return titles[2]
- else:
- if number % 10 < 5:
- return titles[cases[number % 10]]
- else:
- return titles[cases[5]]
- @classmethod
- def _delta_to_str(cls, t_delta):
- days = t_delta.days
- hours, rem = divmod(t_delta.seconds, 3600)
- minutes, seconds = divmod(rem, 60)
- days_text = cls._decl_of_num(days, ('День', 'Дня', 'Дней'))
- hours_text = cls._decl_of_num(hours, ('Час', 'Часа', 'Часов'))
- minutes_text = cls._decl_of_num(minutes, ('Минута', 'Минуты', 'Минут'))
- return f'{days} {days_text}, {hours} {hours_text}, {minutes} {minutes_text}'
- @classmethod
- def get_time_left(cls) -> str:
- conference_time = datetime(2018, 5, 29, 10)
- if conference_time < datetime.now():
- raise ValueError("Конференция началась!")
- return cls._delta_to_str(conference_time - datetime.now())
- def create_mask(self):
- font_fname = "fonts/11871.otf"
- font_size = 20
- if font_fname[-3:] == 'ttf':
- font = ImageFont.truetype(font_fname, font_size)
- else:
- font = ImageFont.FreeTypeFont(font_fname, font_size)
- image = Image.new('RGBA', (self.x_size, self.y_size), (0, 0, 0, 0))
- draw = ImageDraw.Draw(image)
- draw.multiline_text((0, 0), self.get_time_left(), spacing=10, fill='black', font=font)
- return image
- def produce_result(self):
- mask = self.create_mask()
- pixels = mask.load()
- rows = []
- for y in range(self.y_size):
- row = ""
- for x in range(self.x_size):
- if pixels[x, y][3] > 80:
- row += self.grid[y][x]
- else:
- row += " "
- rows.append(row)
- return rows
- def run(self):
- while True:
- try:
- result = self.produce_result()
- except ValueError:
- print("Все на конференцию!")
- return
- print('\n' * 100)
- os.system('cls')
- print("\n".join(result))
- time.sleep(60)
- if __name__ == '__main__':
- t = Timer()
- t.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement