KritaでPythonスクリプトを実行してみる。

python コンピュータ
python

ペイントソフトのKritaでPythonスクリプトが実行出来るようなので試してみます。

スクリプター(Pythonエディタ&実行)

・Kritaを起動&画像を用意
・メニューの「ツール」→「スクリプト」→「スクリプター」

・文字を出力する以下のスクリプトを入力し実行

print ("HELLO Krita!")

・白背景の領域がスクリプトを入力する場所ですのでそちらにスクリプトを入力。

三角アイコンを押すとスクリプトが実行されます。実行結果はウィンドウ下の領域に文字列が出力されます。

Krita モジュールと dir() 関数

kritaモジュールを読み込んでどのようなオブジェクトがあるか確認します。
スクリプト

from krita import *

print(dir(Krita))

結果(Windows11)

['__class__', '__delattr__', '__dict__',
'__dir__', '__doc__', 
'__eq__', '__format__', 
'__ge__', '__getattr__', 
'__getattribute__', '__gt__', 
'__hash__', '__init__', 
'__init_subclass__', '__le__', 
'__lt__', '__module__', 
'__ne__', '__new__', 
'__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', 
'__sizeof__', '__str__', 
'__subclasshook__', '__weakref__', 
'action', 'actions', 'activeDocument', 'activeWindow', 
'addDockWidgetFactory', 'addExtension', 'addProfile', 
'batchmode', 'blockSignals', 'childEvent', 'children', 
'colorDepths', 'colorModels', 'connectNotify', 'createDocument', 
'customEvent', 'deleteLater', 'destroyed', 'disconnect', 
'disconnectNotify', 'dockers', 'documents', 'dumpObjectInfo', 'dumpObjectTree', 
'dynamicPropertyNames', 'event', 'eventFilter', 'extensions', 
'filter', 'filterStrategies', 'filters', 'findChild', 
'findChildren', 'fromVariant', 'getAppDataLocation', 'icon', 
'inherits', 'installEventFilter', 'instance', 'isSignalConnected', 
'isWidgetType', 'isWindowType', 'killTimer', 'krita_i18n', 
'krita_i18nc', 'metaObject', 'moveToThread', 'notifier', 
'objectName', 'objectNameChanged', 'openDocument', 'openWindow', 
'parent', 'profiles', 'property', 'pyqtConfigure', 
'readSetting', 'receivers', 'recentDocuments', 'removeEventFilter', 'resources', 
'sender', 'senderSignalIndex', 'setActiveDocument', 'setBatchmode', 
'setObjectName', 'setParent', 'setProperty', 'signalsBlocked', 'startTimer', 'staticMetaObject', 
'thread', 'timerEvent', 'tr', 'version', 'views', 'windows', 'writeSetting']

結果:Ubuntu22.04

==== Warning: Script not saved! ====
['__class__', 
'__delattr__', '__dict__', 
'__dir__', '__doc__', 
'__eq__', '__format__', 
'__ge__', '__getattr__', 
'__getattribute__', '__gt__', 
'__hash__', '__init__', 
'__init_subclass__', '__le__', 
'__lt__', '__module__', 
'__ne__', '__new__', 
'__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', 
'__sizeof__', '__str__', 
'__subclasshook__', '__weakref__', 
'action', 'actions', 'activeDocument', 'activeWindow', 
'addDockWidgetFactory', 'addExtension', 'addProfile', 'batchmode', 
'blockSignals', 'childEvent', 'children', 'colorDepths', 
'colorModels', 'connectNotify', 'createDocument', 'customEvent', 
'deleteLater', 'destroyed', 'disconnect', 'disconnectNotify', 
'dockers', 'documents', 'dumpObjectInfo', 'dumpObjectTree', 
'dynamicPropertyNames', 'event', 'eventFilter', 'extensions', 
'filter', 'filterStrategies', 'filters', 'findChild', 
'findChildren', 'fromVariant', 'icon', 'inherits', 
'installEventFilter', 'instance', 'isSignalConnected', 'isWidgetType', 
'isWindowType', 'killTimer', 'krita_i18n', 'krita_i18nc', 
'metaObject', 'moveToThread', 'notifier', 'objectName', 
'objectNameChanged', 'openDocument', 'openWindow', 'parent', 
'profiles', 'property', 'pyqtConfigure', 'readSetting', 
'receivers', 'recentDocuments', 'removeEventFilter', 'resources', 
'sender', 'senderSignalIndex', 'setActiveDocument', 'setBatchmode', 
'setObjectName', 'setParent', 'setProperty', 'signalsBlocked', 
'startTimer', 'staticMetaObject', 'thread', 'timerEvent', 
'tr', 'version', 'views', 'windows', 'writeSetting']

Pythonのバージョン確認

スクリプト

import sys
import platform

print(sys.version)

結果:Windows11

3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)]

結果:Ubuntu22.04

==== Warning: Script not saved! ====
3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]

スクリプトの保存ディレクトリ

ディレクトリの場所を確認する方法

「メニュー」→「設定」→「Kritaの設定を変更」→「全般」→「リソース」

リソースフォルダのパスが確認できます。

リソースフォルダの下に「pykrita」というフォルダがありますのでそちらにプラグイン関連のファイルを保存することになります。

画像を新規作成

doc = Krita.instance().createDocument(512,512, "name", "RGBA", "U8", "", 300.0)
Krita.instance().activeWindow().addView(doc)

解像度512×512、RGBA(アルファチャンネル有りカラー)、符号なし8ビット、300ppiの画像(ドキュメント)を作成

Pythonプラグインを作成

メニュー→「設定」→「Kritaの設定を変更」→「リソース」
リソースフォルダのパスが確認できます。

リソースフォルダの下に「pykrita」というフォルダがありますのでそちらにプラグイン関連のファイルを保存することになります。

プラグイン用に「myplugin」ディレクトリを作成

ファイル名:pykrita\myplugin\__init__.py

# myplugin.pyからMyExtensionをインポート
from .myplugin import MyExtension

# そして拡張機能を Krita の拡張機能一覧に追加します:
Krita.instance().addExtension(MyExtension(Krita.instance()))

ファイル名:pykrita\myplugin\myplugin.py

from PyQt5.Qt import *
from krita import *

class MyExtension(Extension):

    def __init__(self, parent):
        # これは親クラスを初期化します。サブクラス化の際に重要です。
        super().__init__(parent)

    def setup(self):
        pass

    def createActions(self, window):
        action = window.createAction("MyPluginAction", "プラグインのサンプル")
        action.triggered.connect(self.test_newdoc)

    def test_newdoc(self):
        print("HELLO Krita Plugin")
        doc = Krita.instance().createDocument(512,512, "name", "RGBA", "U8", "", 300.0)
        Krita.instance().activeWindow().addView(doc)
        root = doc.rootNode()
        layer = doc.createNode("NewLayer","paintLayer")
        root.addChildNode(layer, None)
        doc.refreshProjection()

ファイル名:pykrita\myplugin.desktop

[Desktop Entry]
Type=Service
ServiceTypes=Krita/PythonPlugin
X-KDE-Library=myplugin
X-Python-2-Compatible=false
Name=私のプラグイン
Comment=私の初めてのプラグイン。

・ショートカットキーの割当

「actions」ディレクトリ作成
ファイル名:actions\myplugin.action

<?xml version="1.0" encoding="UTF-8"?>
<ActionCollection version="2" name="Scripts">
  <Actions category="Scripts">
    <text>MayWorkのプラグイン</text>
    <Action name="MyPluginAction">
      <icon></icon>
      <text>MpyPluginプラグイン</text>
      <whatsThis>ヘルプアテキスト</whatsThis>
      <toolTip>ツールチップ</toolTip>
      <iconText>アイコン文字列</iconText>
      <activationFlags>10000</activationFlags>
      <activationConditions>0</activationConditions>
      <shortcut>ctrl+alt+shift+c</shortcut>
      <isCheckable>false</isCheckable>
      <statusTip>ステータスバー</statusTip>
    </Action>
  </Actions>
</ActionCollection>

・プラグインを有効化

kiritaを再起動
「メニュー」→「設定」→「Kritaの設定を変更」→「Pythonプラグインマネージャ」


成功していると、プラグイン名が表示されるので、チェックをつける。

kiritaを再起動

・フィルターの実行
「メニュー」→「ツール」→「スクリプト」

登録した「プラグインのサンプル」という項目が表示されているのでそちらをクリック。

新しいドキュメント(512×512サイズ)が追加されます。

フィルターの作成と登録の手順が確認できました。

コメント