A pie clock, because pies are tasty.
There is another pieclock here with a layout somewhat different from this one.
1 import Tkinter
2 import time
3
4 def current_time():
5 return time.localtime()[3:6]
6
7 class PieClock(Tkinter.Canvas):
8 frequency = 250
9
10 def __init__(self, master=None, **kwargs):
11 Tkinter.Canvas.__init__(self, master, **kwargs)
12
13 self.bind('<Configure>', self.update_clock)
14 self.create_arcs()
15 self.running = True
16
17 def arcs_coords(self):
18 size = min(self.winfo_width(), self.winfo_height())
19 return (
20 (1, 1, size - 1, size - 1),
21 (size/6, size/6, size - size/6, size - size/6),
22 (size/3, size/3, size - size/3, size - size/3)
23 )
24
25 def update_clock(self, event=None):
26 hour, minute, sec = current_time()
27 arc_hour, arc_min, arc_sec = self.arcs_coords()
28
29 second_extent = (360 / 60) * sec
30 minute_extent = (360 / 60) * minute + (second_extent / 60.)
31 hour_extent = (360 / 12) * hour + (minute_extent / 60.)
32
33 self.itemconfigure('hour', extent=-hour_extent)
34 self.coords('hour', *arc_hour)
35 self.itemconfigure('minute', extent=-minute_extent)
36 self.coords('minute', *arc_min)
37 self.itemconfigure('second', extent=-second_extent)
38 self.coords('second', *arc_sec)
39
40
41 def create_arcs(self):
42 self.create_arc(0, 0, 0, 0, start=90, fill='SteelBlue1', outline='',
43 tag="hour")
44 self.create_arc(0, 0, 0, 0, start=90, fill='SteelBlue3', outline='',
45 tag="minute")
46 self.create_arc(0, 0, 0, 0, start=90, fill='black', outline='',
47 tag="second")
48
49
50 def run(self):
51 self.update_clock()
52 if self.running:
53 self.after(self.frequency, self.run)
54
55 def stop(self):
56 self.running = False
57
58
59 def main():
60 root = Tkinter.Tk()
61 clock = PieClock(width=250, height=250)
62 clock.pack(expand=True, fill='both')
63 clock.run()
64 root.wm_aspect(100, 100, 10, 10)
65 root.mainloop()
66
67 if __name__ == '__main__':
68 main()