Files
pyGUI/src/pygui/backend/utils.py
T

30 lines
923 B
Python

import logging
from functools import wraps
def slot_error_boundary(func):
"""Wrap a @Slot method so exceptions are logged + signalled to QML.
Usage (stack under @Slot):
@Slot()
@slot_error_boundary
def myMethod(self) -> None:
...
On exception:
- Logs full traceback via logger.exception()
- Emits logMessage signal with human-readable error (if available)
- Returns None so QML never sees a crash
"""
@wraps(func)
def wrapper(self, *args, **kwargs):
try:
return func(self, *args, **kwargs)
except Exception as e:
logger = logging.getLogger(self.__class__.__module__)
logger.exception("Slot '%s' raised: %s", func.__name__, e)
if hasattr(self, "logMessage"):
self.logMessage.emit(f"Error in {func.__name__}: {str(e)}")
return None
return wrapper