Source code for pyqt_reactive.core.debounce_timer

"""Reusable trailing debounce timer."""

from typing import Callable, Optional
from PyQt6.QtCore import QTimer


[docs] class DebounceTimer: """ Reusable trailing debounce timer. Restarts timer on each call. Handler fires only after delay_ms of inactivity. Usage: self._debounce = DebounceTimer(delay_ms=200, handler=self._do_update) def on_text_changed(self): self._debounce.trigger() # Restarts timer """
[docs] def __init__(self, delay_ms: int, handler: Callable[[], None]): self._delay_ms = delay_ms self._handler = handler self._timer: Optional[QTimer] = None
[docs] def trigger(self): """Trigger debounce — restarts timer.""" if self._timer is not None: self._timer.stop() self._timer = QTimer() self._timer.setSingleShot(True) self._timer.timeout.connect(self._handler) self._timer.start(self._delay_ms)
[docs] def cancel(self): """Cancel pending trigger.""" if self._timer is not None: self._timer.stop() self._timer = None
[docs] def force(self): """Cancel timer and fire handler immediately.""" self.cancel() self._handler()