-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathETKTimer.py
40 lines (31 loc) · 1.29 KB
/
ETKTimer.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
from threading import Thread
from tkinter import Tk
from typing import Any, Callable
from .Internal.ETKMain import ETKMain
class ETKTimer:
def __init__(self, main: ETKMain, interval_in_ms: int, timer_function: Callable[[], None], running: bool = True, thread_daemonic: bool = True, **kwargs: Any) -> None:
self.__my_Tk: Tk = main.root_tk_object
self.__scheduler = main.scheduler
self.__timer_function: Callable[[], None] = timer_function
self.interval_in_ms: int = interval_in_ms
self.__is_running = running
self.__thread_daemonic = thread_daemonic
if running:
self.__my_Tk.after(self.interval_in_ms, self.__trigger)
# region Properties
@property
def running(self) -> bool:
return self.__is_running
@running.setter
def running(self, value: bool) -> None:
self.__is_running = value
if value:
self.__trigger()
# endregion
# region Methods
def __trigger(self) -> None:
if self.__is_running:
t = Thread(target=self.__scheduler.schedule_event, args=(self.__timer_function, tuple()), daemon=self.__thread_daemonic)
t.start()
self.__my_Tk.after(self.interval_in_ms, self.__trigger)
# endregion