DMClock
From ActiveArchives
Based on libdmtx
DMClock: pygame display
Usage
usage: dmclock.py [-h] [--background BACKGROUND]
[--textbackground TEXTBACKGROUND]
[--textforeground TEXTFOREGROUND] [--fontsize FONTSIZE]
[--linespacing LINESPACING] [--paddingleft PADDINGLEFT]
[--paddingtop PADDINGTOP]
[message [message ...]]
Display a Data Matrix Clock with message
positional arguments:
message an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--background BACKGROUND
background color (hex), default 000000
--textbackground TEXTBACKGROUND
background color (hex) for text, default 000000
--textforeground TEXTFOREGROUND
foreground color (hex) for text, default FFFFFF
--fontsize FONTSIZE font size
--linespacing LINESPACING
line spacing
--paddingleft PADDINGLEFT
text padding left
--paddingtop PADDINGTOP
text padding top
Code
import pygame, datetime from pydmtx import DataMatrix import argparse parser = argparse.ArgumentParser(description='Display a Data Matrix Clock with message') parser.add_argument("message", nargs='*', help='an integer for the accumulator') parser.add_argument("--background", default="000000", help='background color (hex), default 000000') parser.add_argument("--textbackground", default="000000", help='background color (hex) for text, default 000000') parser.add_argument("--textforeground", default="FFFFFF", help='foreground color (hex) for text, default FFFFFF') parser.add_argument("--fontsize", type=int, default=56, help='font size') parser.add_argument("--linespacing", type=int, default=10, help='line spacing') parser.add_argument("--paddingleft", type=int, default=50, help='text padding left') parser.add_argument("--paddingtop", type=int, default=50, help='text padding top') args = parser.parse_args() def rgb(h): if not h.startswith("#"): h = "#" + h n = eval('0x'+h[1:]) return (n>>16)&0xff, (n>>8)&0xff, n&0xff background = rgb(args.background) textforeground = rgb(args.textforeground) textbackground = rgb(args.textbackground) pygame.init() size=[1280,800] framerate = 4 milliseconds = True screen=pygame.display.set_mode(size, pygame.FULLSCREEN) pygame.display.set_caption("qrclock") clock=pygame.time.Clock() dm_write = DataMatrix() done=False font = pygame.font.Font(pygame.font.get_default_font(), args.fontsize) text_left = size[1] + args.paddingleft text_top = args.paddingtop usermessagelines = args.message def drawlines(screen, font, lines, antialias, fg, bg, left, top, spacing=0): for line in lines: s = font.render(line, antialias, fg, bg) screen.blit(s, (left, top)) top += font.get_linesize() + spacing while done==False: for event in pygame.event.get(): if event.type == pygame.QUIT or \ (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): done=True screen.fill(background) now = datetime.datetime.now() tstr = now.strftime("%Y-%m-%d %H:%M:%S") if milliseconds: ms = now.strftime("%f") tstr += "," + ms[:3] messagelines = usermessagelines[:] messagelines.extend(tstr.split()) msg = " ".join(messagelines) dm_write.encode(msg) im = dm_write.image im = im.resize((size[1], size[1])) # im = im.convert("RGB") pyg_im = pygame.image.frombuffer(im.tostring(), im.size, im.mode) screen.blit(pyg_im, (0, 0)) drawlines(screen, font, messagelines, False, textforeground, textbackground, text_left, text_top, args.linespacing) pygame.display.flip() clock.tick(framerate) # Limit to 30 frames per second pygame.quit()