http://www.artima.com/weblogs/viewpost.jsp?thread=122250
I then try to implement M Clock on pys60. I remove a few
things to make the code short.
from __future__ import division from appuifw import * import math, time, e32 app.body = c = Canvas() radius = 72 bigsize = radius * .975 litsize = radius * .67 mx, my = 88, 72 N = 9 # 2,3,4,5,6, 32, 128 def draw(hh, mm, ss, colors=(0, 1, 2)): # Set bigd, litd to angles in degrees for big, little hands # 12 => 90, 3 => 0, etc. bigd = (90 - (mm*60 + ss) / 10) % 360 litd = (90 - (hh*3600 + mm*60 + ss) / 120) % 360 # Set bigr, litr to the same values in radians bigr = bigd * math.pi / 180 litr = litd * math.pi / 180 # Draw the background colored arcs drawbg(bigd, litd, colors) # Draw the hands c.line([mx, my, mx + bigsize*math.cos(bigr), my - bigsize*math.sin(bigr)], 0, width = radius/50) c.line([mx, my, mx + litsize*math.cos(litr), my - litsize*math.sin(litr)], 0, width = radius/33) # Draw the text c.text([5, 144-5], u"%02d:%02d:%02d" % (hh, mm, ss), 0xffffff) def drawbg(bigd, litd, colors=(0, 1, 2)): c.clear(0) table = [] for angle, colorindex in [(bigd - 180/N, 0), (litd - 180/N, 1), ( 90 - 180/N, 2)]: angle %= 360 for i in range(N): color = 255 if colorindex in colors: color = (N-1-i)*color//(N-1) table.append((angle, color, colorindex)) angle += 360/N if angle >= 360: angle -= 360 table.append((0, color, colorindex)) table.sort() table.append((360, None)) fill = [0, 0, 0] for i in range(len(table)-1): angle, color, colorindex = table[i] fill[colorindex] = color if angle < 359: # for bug when 359==360==0 c.pieslice([mx-radius,my-radius,mx+radius,my+radius], angle * math.pi/180, 0, # start, end fill=tuple(fill), width=0) c.line([mx+1, my, mx+radius-1, my], tuple(fill)) # complete at 360 deg running = 1 def quit(): global running running = 0 app.exit_key_handler= quit while running: # redraw loop t = time.time() + time.clock()%1 # time() lack decimal precision hh, mm, ss = time.localtime(t)[3:6] # +7*60*60 draw(hh, mm, ss, (0,1,2)) e32.ao_sleep(1-t%1)
You can see the sceenshot from here.
http://flickr.com/photos/korakot/32337789/