Krita Source Code Documentation
Loading...
Searching...
No Matches
__init__.py
Go to the documentation of this file.
2# SPDX-License-Identifier: GPL-3.0-or-later
3#
4
5from __future__ import print_function
6
7import pykrita
8import os
9import sys
10
11# Look for PyQt
12try:
13 if pykrita.qt_major_version() == 5:
14 from PyQt5 import QtCore
15 else:
16 from PyQt6 import QtCore
17except ImportError:
18 print("Python cannot find the Qt%d bindings." % pykrita.qt_major_version(), file=sys.stderr)
19 print("Please make sure that the needed packages are installed.", file=sys.stderr)
20 raise
21
22import builtins
23
24# Disallow importing a conflicting version of PyQt,
25# which would load a conflicting version of Qt and crash Krita when used.
26pyqt_wrong = "PyQt" + ("6" if pykrita.qt_major_version() == 5 else "5")
27pyqt_wrong_casefolded = pyqt_wrong.casefold()
28import_real = builtins.__import__
29def importAvoidWrongPyQtHack(name, globals=None, locals=None, fromlist=(), level=0):
30 name_casefolded = name.casefold()
31 if name_casefolded == pyqt_wrong_casefolded or \
32 name_casefolded.startswith(pyqt_wrong_casefolded+"."):
33
34 raise(ModuleNotFoundError(
35 f"This version of Krita is not compatible with {pyqt_wrong}!",
36 name=name))
37 else:
38 return import_real(name, globals, locals, fromlist, level)
39builtins.__import__ = importAvoidWrongPyQtHack
40
41from .api import *
42from .decorators import *
43from .dockwidgetfactory import *
44from PyKrita import krita
45
46import signal
47signal.signal(signal.SIGINT, signal.SIG_DFL)
48
49krita_path = os.path.dirname(os.path.abspath(__file__))
50sys.path.insert(0, krita_path)
51print("%s added to PYTHONPATH" % krita_path, file=sys.stderr)
52
53# Shows nice looking error dialog if an unhandled exception occurs.
54import excepthook
55excepthook.install()
56
57builtins.i18n = Krita.krita_i18n
58builtins.i18nc = Krita.krita_i18nc
59builtins.Scripter = Krita.instance()
60builtins.Application = Krita.instance()
61builtins.Krita = Krita.instance()
62
63
64def qDebug(text):
65 '''Use KDE way to show debug info
66
67 TODO Add a way to control debug output from partucular plugins (?)
68 '''
69 plugin = sys._getframe(1).f_globals['__name__']
70 pykrita.qDebug('{}: {}'.format(plugin, text))
71
72
73@pykritaEventHandler('_pluginLoaded')
74def on_load(plugin):
75 if plugin in init.functions:
76 # Call registered init functions for the plugin
77 init.fire(plugin=plugin)
78 del init.functions[plugin]
79 return True
80
81
82@pykritaEventHandler('_pluginUnloading')
83def on_unload(plugin):
84 if plugin in unload.functions:
85 # Deinitialize plugin
86 unload.fire(plugin=plugin)
87 del unload.functions[plugin]
88 return True
89
90
91@pykritaEventHandler('_pykritaLoaded')
93 qDebug('PYKRITA LOADED')
94 return True
95
96
97@pykritaEventHandler('_pykritaUnloading')
99 qDebug('UNLOADING PYKRITA')
100 return True
static Krita * instance()
instance retrieve the singleton instance of the Application object.
Definition Krita.cpp:396
qDebug(text)
Definition __init__.py:64
importAvoidWrongPyQtHack(name, globals=None, locals=None, fromlist=(), level=0)
Definition __init__.py:29
on_load(plugin)
Definition __init__.py:74
on_pykrita_loaded()
Definition __init__.py:92
import_real
Definition __init__.py:28
on_unload(plugin)
Definition __init__.py:83
on_pykrita_unloading()
Definition __init__.py:98