from kivy.uix.widget import Widget
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Color, Line
from math import cos, sin, pi
from kivy.clock import Clock
from kivy.lang import Builder

import datetime

kv = '''
#:import math math

<ClockNumber@Label>:
    i: 0
    text: str(self.i)
    pos_hint: {"center_x": 0.5+0.42*math.sin(math.pi/6*(self.i-12)), "center_y": 0.5+0.42*math.cos(math.pi/6*(self.i-12))}
    font_size: self.height/16

<MyClockWidget>:
    FloatLayout:
        size_hint: None, None
        pos_hint: {"center_x":0.5, "center_y":0.5}
        size: 0.9*min(root.size), 0.9*min(root.size)
        canvas:
            Color:
                rgb: 0.1, 0.1, 0.1
            Ellipse:
                size: self.size     
                pos: self.pos
        ClockNumber:
            i: 1
        ClockNumber:
            i: 2
        ClockNumber:
            i: 3
        ClockNumber:
            i: 4
        ClockNumber:
            i: 5
        ClockNumber:
            i: 6
        ClockNumber:
            i: 7
        ClockNumber:
            i: 8
        ClockNumber:
            i: 9
        ClockNumber:
            i: 10
        ClockNumber:
            i: 11
        ClockNumber:
            i: 12
    Ticks:
        r: min(root.size)*0.9/2
'''

Builder.load_string(kv)


class MyClockWidget(FloatLayout):
    pass


class Ticks(Widget):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        Clock.schedule_interval(self.update_clock, 1)
        self.bind(pos=self.update_clock)
        self.bind(size=self.update_clock)

    def update_clock(self, *args):
        self.canvas.clear()
        p = self.parent
        with self.canvas:
            time = datetime.datetime.now()
            Color(0.2, 0.5, 0.2)
            Line(points=[p.center_x, p.center_y, p.center_x+0.8*self.r*sin(pi/30*time.second), p.center_y+0.8*self.r*cos(pi/30*time.second)], width=1, cap="round")
            Color(0.3, 0.6, 0.3)
            Line(points=[p.center_x, p.center_y, p.center_x+0.7*self.r*sin(pi/30*time.minute), p.center_y+0.7*self.r*cos(pi/30*time.minute)], width=2, cap="round")
            Color(0.4, 0.7, 0.4)
            th = time.hour*60 + time.minute
            Line(points=[p.center_x, p.center_y, p.center_x+0.5*self.r*sin(pi/360*th), p.center_y+0.5*self.r*cos(pi/360*th)], width=3, cap="round")


if __name__ == '__main__':
    from kivy.app import App

    kv_test = """
BoxLayout:
    orientation: 'vertical'
    Label:
        text: 'Analog Clock Test'
    MyClockWidget:
"""


    class MyClockApp(App):
        def build(self):
            return Builder.load_string(kv_test)


    MyClockApp().run()
