34 lines
957 B
Python
34 lines
957 B
Python
import threading
|
|
import time
|
|
from abc import ABC, abstractmethod
|
|
from tkinter import Tk
|
|
from tkinter.ttk import Notebook
|
|
from tkinter import Frame
|
|
|
|
class ThreadedTab(ABC, Frame):
|
|
|
|
def __init__(self, root: Notebook | Tk, stop_event: threading.Event, refresh_rate=1, **kwargs):
|
|
super().__init__(root, **kwargs)
|
|
self.stop_event = stop_event
|
|
self.refresh_rate = refresh_rate
|
|
self._thread = threading.Thread(target=self.__loop)
|
|
self.build()
|
|
self._thread.start()
|
|
|
|
def __loop(self):
|
|
while not self.stop_event.is_set():
|
|
self.task()
|
|
start = time.time()
|
|
while time.time() - start < self.refresh_rate:
|
|
if self.stop_event.is_set():
|
|
break
|
|
time.sleep(0.2)
|
|
|
|
@abstractmethod
|
|
def build(self):
|
|
pass
|
|
|
|
@abstractmethod
|
|
def task(self, *args):
|
|
raise NotImplementedError("Method not implemented")
|