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

None: PieClock (last edited 2008-11-12 02:38:13 by GuilhermePolo)