#from PIL import Image, ImageDraw from datetime import datetime import math import cairo def draw_clock(size=(800, 480), r=210, mirror=False): surface = cairo.ImageSurface(cairo.FORMAT_RGB24, size[0], size[1]) context = cairo.Context(surface) now = datetime.now() # im = Image.new('RGBA', size, (0, 0, 0, 255)) context.save() context.translate(size[0]/2, size[1]/2) #translate to center if mirror: context.scale(-1, 1) #draw watch face context.set_source_rgb(0.7, 0.7, 0.7) for i12 in range(12): for i5 in range(5): angle = (i12 * 5 + i5) / 60 * 2 * math.pi len = r * 0.93 if i5 == 0 else r * 0.97 thick = 5 if i5 == 0 else 2 context.save() context.set_line_width(thick*r/180) context.rotate(angle) context.move_to(0, r) context.line_to(0, len) context.stroke() context.restore() #draw hour pointer base = r * 0.015 context.save() context.rotate((now.hour + (now.minute + now.second / 60) / 60) / 12 * 2 * math.pi) context.set_line_width(10*r/180) context.set_source_rgb(1, 1, 1) context.move_to(+base, r * 0.2) context.line_to(0, -r * 0.65) context.line_to(-base, r * 0.2) context.stroke() context.restore() #draw minute pointer base = r * 0.02 context.save() context.rotate((now.minute + now.second / 60) / 60 * 2 * math.pi) context.set_line_width(8*r/180) context.set_source_rgb(1, 1, 1) context.move_to(+base, r * 0.2) context.line_to(0, -r * 0.95) context.line_to(-base, r * 0.2) context.stroke() context.restore() #draw second pointer context.save() context.rotate((now.second + now.microsecond / 1000000) / 60 * 2 * math.pi) context.set_line_width(4*r/180) context.set_source_rgb(1, 0, 0) context.move_to(0, r * 0.3) context.line_to(0, -r * 0.8) context.stroke() context.arc(0, -r * 0.8, r * 0.06, 0, 2*math.pi) context.fill() context.arc(0, 0, r * 0.03, 0, 2*math.pi) context.fill() context.restore() context.restore() return surface if __name__ == "__main__": draw_clock().write_to_png("clock.png") # import matplotlib.pyplot as plt # plt.imshow(draw_clock()) # plt.show()