.. _QtHandler: QtHandler ========= **class QtHandler(parent: Optional[QObject] = None, level: int = logging.ERROR)** Bases: :class:`~poriscope.utils.logging.Handler` Surface log records to the user as modal dialogs. Attached to the root logger by :meth:`poriscope.main_app.App.configure_logger` alongside the console and file handlers. The default level is ``ERROR``, not ``NOTSET``. Log severity is not a statement about how the user should be interrupted: routine states legitimately log at ``WARNING`` - an empty channel, a cold start with no analysis tabs instantiated yet, an operation proceeding without an optional filter - and none of those warrant a modal dialog. Anything the user should be *told* rather than *interrupted* by belongs on the ``add_text_to_display`` panel instead. Note :meth:`poriscope.models.main_model.MainModel.update_logging_level` deliberately skips this handler when it applies a new level to the root logger's handlers, so choosing a more verbose log level does not turn warnings back into dialogs. Public Methods -------------- Abstract Methods ~~~~~~~~~~~~~~~~ These methods must be implemented by subclasses. (none) Concrete Methods ~~~~~~~~~~~~~~~~ .. automethod:: poriscope.utils.QtHandler.QtHandler.emit .. automethod:: poriscope.utils.QtHandler.QtHandler.show_message_box Private Methods --------------- Abstract Methods ~~~~~~~~~~~~~~~~ These methods must be implemented by subclasses. (none) Concrete Methods ~~~~~~~~~~~~~~~~ .. automethod:: poriscope.utils.QtHandler.QtHandler.__init__ .. automethod:: poriscope.utils.QtHandler.QtHandler._queue_record .. automethod:: poriscope.utils.QtHandler.QtHandler._show_next_pending