Tkinter Wiki   PieClock UserPreferences
 
HelpContents FindPage Diffs Info Edit Subscribe XML Print View

A pie clock, because pies are tasty.

There is another pieclock [WWW]here with a layout somewhat different from this one.

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

pieclock.png

PythonPowered