You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

82 lines
2.3 KiB

#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()