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