「Krita」と「Python」でUIパーツを使って「ドッキングパネル」を構築する

2025年4月11日(金)
大西 武 (オオニシ タケシ)
第15回の今回は「Krita」のメインUIの右側にあるエリアにドッキングするパネルにUIパーツを配置して構築する解説をします。

はじめに

今回で本連載は最終回となります。最後に1つ書き残したことである「ドッキングパネル」について解説します。ドッキングパネルとは図1のように赤く囲んだエリアにドッキングするUIのことです。ドッキングパネルはPythonスクリプトでは「ドッカー(Docker)」とも呼ばれます。

ドッキングパネルも第14回のプラグインと似たようにPythonでスクリプティングして構築します。スクリプトの配置やインストール方法もプラグインとほとんど同じです。さらにドッキングパネルには第8回のようなUIパーツを配置できます。これによりドッキングパネルでUIパーツをさらに有効利用できます。

図1:ドッキングパネル

ラベルとプッシュボタンのドッキングパネル

まずはシンプルなドッキングパネルから作ってみましょう。文字を表示するだけのラベル(QLabel)とプッシュボタン(QPushButton)のUIパーツをドッキングパネルに配置します。さらにプッシュボタンが押されたらメッセージボックス(QMessageBox)を表示します。

ボタンを押すとメッセージボックスが現れるドッカー

ドッカーは「DockWidget」クラスで扱います。それを継承したクラス(ここでは「MyDockerMessageBox」クラス)の中で、初期化メソッド(「__init__」メソッド)やキャンバスが変更されたときに呼ばれる「canvasChanged」メソッドをオーバーライドします。

・サンプルスクリプト「krita」→「pykrita」→「docker_messagebox」→「docker_massagebox.py」
01# モジュール
02from PyQt5.QtWidgets import *
03from krita import *
04# ドッカークラス
05class MyDockerMessageBox(DockWidget):
06  # 初期化メソッド
07  def __init__(self):
08    super().__init__()
09    self.setWindowTitle("タイトル(「設定」→「ドッキングパネル」のメニュー一覧に表示される)")
10    # ウィジェット
11    mainWidget = QWidget(self)
12    self.setWidget(mainWidget)
13    # ラベルUI
14    label = QLabel("QDialogでなくDockWidgetにUIパーツを貼り付ける")
15    # プッシュボタンUI
16    btn = QPushButton("メッセージを表示する", mainWidget)
17    btn.clicked.connect(self.messageBox)
18    # レイアウト
19    layout = QVBoxLayout()
20    layout.addWidget(label)
21    layout.addWidget(btn)
22    # レイアウトのセット
23    mainWidget.setLayout(layout)
24  # ボタンが押されたら呼ばれる
25  def messageBox(self):
26    QMessageBox.information(QWidget(),"メッセージボックス","ボタンが押されました!")
27  # キャンバスが変更されたら呼ばれる
28  def canvasChanged(self, canvas):
29    pass
30# ドッカーを追加
31Krita.instance().addDockWidgetFactory(DockWidgetFactory("MyDockerMessageBox", DockWidgetFactoryBase.DockRight, MyDockerMessageBox))

【サンプルスクリプトの解説】
PyQt5とkritaモジュールを読み込みます。
DockWidgetクラスから派生したMyDockerMessageBoxクラスを宣言します。
初期化「__init__」メソッドでDockWidgetクラスの__init__メソッドを呼び出します。
setWindowTitleでドッキングパネルのタイトルとKritaの「設定」→「ドッキングパネル」のメニュー一覧に表示されるタイトルをセットします。
QWidgetのインスタンス(mainWidget)をセットしたらドッキングパネルにウィジェットが配置されます。ラベルを作りレイアウトに追加(addWidget)します。プッシュボタンを作り、クリックされたら「messageBox」メソッドを呼び出すようにフックします。
messageBoxメソッドでメッセージボックスを表示します。
キャンバスが変更されたらcanvasChangedメソッドが呼ばれます。
addDockWidgetFactoryメソッドでユニークな(一意の)プラグイン名(ここでは"MyDockerMessageBox")をドックの右側(DockRight)にMyDockerMessageBoxクラスをセットします。

ドッカーの初期化ファイル

基本的に何も実行しませんが、初期化の「__init__」ファイルを用意しておくようです。

・サンプルスクリプト「krita」→「pykrita」→「docker_messagebox」→「__init__.py」
1from .docker_messagebox import MyDockerMessageBox

【サンプルスクリプトの解説】
モジュールを読み込みます。

ドッカーのプラグインの設定ファイル

第14回のプラグインと同様に「.desktop」ファイルでプラグインの設定ファイルを用意します。1行目に[Desktop Entry]を、「Type」を「Service」に、「ServiceTypes」を「Krita/PythonPlugin」に、「X-KDE-Library」にプログラム名(ここでは「docker_messagebox」)を、「X-Python-2-Compatible」をfalseに、「Name」にユニークな(一意の)ドッカープラグイン名(ここでは「MyDockerMessageBox」)を、「Comment」にコメント(ここでは「MyDockerMessageBoxドッキングパネル。」)を書きます。

・サンプルスクリプト「krita」→「pykrita」→「docker_messagebox.desktop」
1[Desktop Entry]
2Type=Service
3ServiceTypes=Krita/PythonPlugin
4X-KDE-Library=docker_messagebox
5X-Python-2-Compatible=false
6Name=MyDockerMessageBox
7Comment=MyDockerMessageBoxドッキングパネル。

ドッカープラグインをリソースフォルダに配置する

ドッカーのスクリプトを配置するのも第14回のプラグインの配置とほぼ同じです。

  1. 図2の通り「C:/Users/ユーザー名/AppData/Roaming/krita/pykrita」フォルダに「docker_messagebox/__init__.py」ファイル、「docker_messagebox/docker_messagebox.py」ファイル、「docker_messagebox.desktop」ファイルを配置します。

    図2:リソースフォルダに配置

  2. Krita本体を起動します。
  3. 「設定」→「Kritaの設定を変更」メニューを実行すると「Kritaの設定」ダイアログが開きます。
  4. 図3のように「Pythonプラグインマネージャ」で「MyDockerMessgeBox」のチェックを入れます。

    図3:Kritaの設定

  5. Kritaを終了し、もう一度Kritaを起動します。
  6. 「開始」→「新しい画像」を「作成」します。
  7. 「設定」→「ドッキングパネル」から「タイトル(「設定」→「ドッキングパネル」のメニュー一覧に表示される)」にチェックを入れます。
  8. 図4のようにドッキングパネルにボタンのドッカーが現れます。

    図4:ボタンを押すとメッセージボックスが現れる

ドッカープラグインをzipファイルを使ってインストールする

他のパソコンにもシンプルにドッカープラグインをインストールしたいときがあります。そのような場合は、zipファイルをインストールすれば手軽にプラグインを追加できます。

  1. 「docker_messagebox_plugin」フォルダに「docker_messagebox/__init__.py」ファイル、「docker_messagebox/docker_messagebox.py」ファイル、「docker_messagebox.desktop」ファイルを入れます。
  2. 「docker_messagebox_plugin」フォルダをzipファイルに圧縮します。
  3. Kritaを起動します。
  4. 「ツール」→「スクリプト」→「Pythonプラグインをファイルからインポート」メニューを実行します。
  5. 「プラグインをインポート」ダイアログで「docker_messagebox_plugin.zip」ファイルを選択し「開く」をクリックします。
  6. Kritaを終了し、もう一度Kritaを起動します。
  7. 「開始」→「新しい画像」を「作成」します。
  8. 「設定」→「ドッキングパネル」から「タイトル(「設定」→「ドッキングパネル」のメニュー一覧に表示される)」のチェックを入れます。
  9. ドッキングパネルにボタンのドッカーが現れます。
著者
大西 武 (オオニシ タケシ)
1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書など30冊以上を商業出版する作家。Microsoftで大賞やNTTドコモでグランプリなど20回以上全国区のコンテストに入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」が全国放送のTVで約10回出題。
https://profile.vixar.jp

連載バックナンバー

開発言語技術解説
第15回

「Krita」と「Python」でUIパーツを使って「ドッキングパネル」を構築する

2025/4/11
第15回の今回は「Krita」のメインUIの右側にあるエリアにドッキングするパネルにUIパーツを配置して構築する解説をします。
開発言語技術解説
第14回

「Krita」と「Python」でプラグインを作ろう

2025/3/21
第14回の今回は「Krita」で「Python」スクリプトを「プラグイン」にしたり、「ショートカットキー」をセットする解説をします。
開発言語技術解説
第13回

「Krita」と「Python」でオリジナルの幾何学模様を作ろう

2025/2/27
第13回の今回は「Krita」の「Python」でダイアログUIにUIパーツを貼り付けて操作できるようにして、オリジナルの幾何学模様を作成できるプログラムを解説します。さらにアニメーションも作ります。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています