import logging import signal from PySide6 import QtCore from PySide6.QtWidgets import QApplication from PySide6.QtCore import QTimer import sys import constants from src.pluginregistry import PluginRegistry import gettext from src.ui.icon import Icon __version__ = '0.2.0' gettext.install('krowlog', 'locale') logging.basicConfig(level=logging.INFO) log = logging.getLogger("main") def stop_signal(signum, _stackframe): """ Handle terminate signal """ try: log.info("Terminate signal received. %s", signum) QtCore.QCoreApplication.quit() except Exception: log.exception("Exception occurred while terminating") sys.exit(1) sys.exit(0) if __name__ == "__main__": app = QApplication(sys.argv) app.setWindowIcon(Icon(constants.krow_icon)) # works only for Linux # make icon appear in Windows # see https://stackoverflow.com/questions/1551605/how-to-set-applications-taskbar-icon-in-windows-7/1552105#1552105 if sys.platform == 'win32' or sys.platform == 'cygwin': myappid = 'krowlog' # arbitrary string import ctypes ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(myappid) # workaround to make signals work in QT apps. # They do not work out of the box, because the main thread # is running in C++ code once app.exec() is executed # Forcing an empty lambda to be executed periodically gives # control back to python and allows python to react to signals timer = QTimer() timer.timeout.connect(lambda: None) timer.start(100) # init plugins PluginRegistry.load_plugin("KrowLogPlugin") PluginRegistry.load_plugin("OpenFilePlugin") PluginRegistry.load_plugin("LogFilePlugin") PluginRegistry.load_plugin("NotesPlugin") PluginRegistry.load_plugin("TimeDiffPlugin") PluginRegistry.load_plugin("FilesBrowserPlugin") window = PluginRegistry.execute_single("create_main_window") window.show() PluginRegistry.execute("after_start") signal.signal(signal.SIGINT, stop_signal) signal.signal(signal.SIGTERM, stop_signal) app.exec()