ProyectoFinalPython/app/widgets/abc/ThreadedTab.py

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