-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathklokke.py
68 lines (55 loc) · 2.11 KB
/
klokke.py
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
# PythonKlokke
# © 2024 Are Digranes
import tkinter as tk
import time
from math import floor, pi as pi, sin as sin, cos as cos
BASE_SEKUNDER = 1_000_000_000
BASE_MINUTTER = 60*BASE_SEKUNDER
BASE_TIMER = 60*BASE_MINUTTER
BASE_KLOKKE = 12*BASE_TIMER
SKJERM_MARGIN = 160
MARGIN = 10
VISER_LENGDE_TIMER = 0.6 # Lengde på visere i prosent
VISER_LENGDE_MINUTTER = 0.8
VISER_LENGDE_SEKUNDER = 0.9
KLOKKE_SENTER = 0.05
OPPDATERING = 10 # Oppdatering i ms
root = tk.Tk()
visere = []
størrelse = min(root.winfo_screenwidth(), root.winfo_screenheight())-SKJERM_MARGIN
midtpunkt = størrelse/2
canvas = tk.Canvas(root, width=størrelse, height=størrelse)
tidssone_avvik = (-time.altzone if time.daylight else -time.timezone)*BASE_SEKUNDER
def main():
root.title("PythonKlokke")
canvas.pack(anchor=tk.CENTER, expand=True)
oval = canvas.create_oval(MARGIN,MARGIN,størrelse-MARGIN,størrelse-MARGIN,fill="black")
visere.append(canvas.create_line(0,0,0,0,width=10)) # time
visere.append(canvas.create_line(0,0,0,0,width=10)) # minutt
visere.append(canvas.create_line(0,0,0,0,fill="red")) # sekund
v0 = midtpunkt-(midtpunkt*KLOKKE_SENTER)
v1 = midtpunkt+(midtpunkt*KLOKKE_SENTER)
oval = canvas.create_oval(v0,v0,v1,v1,fill="black") # senter
oppdater_visere()
root.mainloop()
def viser(viser, vinkel, radius, midtpunkt):
canvas.coords(viser, midtpunkt, midtpunkt, midtpunkt+radius*sin(vinkel), midtpunkt-radius*cos(vinkel))
def oppdater_visere():
# time-viser
radius = midtpunkt*VISER_LENGDE_TIMER
tid = tidssone_avvik + time.time_ns() % BASE_KLOKKE
vinkel = 2*pi*tid/BASE_KLOKKE
viser(visere[0], vinkel, radius, midtpunkt)
# minutt-viser
radius = midtpunkt*VISER_LENGDE_MINUTTER
tid = tid % BASE_TIMER
vinkel = 2*pi*tid/BASE_TIMER
viser(visere[1], vinkel, radius, midtpunkt)
# sekund-viser
radius = midtpunkt*VISER_LENGDE_SEKUNDER
tid = tid % BASE_MINUTTER
vinkel = 2*pi*tid/BASE_MINUTTER
viser(visere[2], vinkel, radius, midtpunkt)
root.after(OPPDATERING, oppdater_visere)
if __name__ == "__main__":
main()