「Krita」と「Python」でダイアログUIを構築してみよう

2024年10月11日(金)
大西 武 (オオニシ タケシ)
第7回の今回は「Krita」の「Python」で「PyQt5」モジュールの「ウィジェット」を使って、ダイアログUIを構築する解説をします。

はじめに

今回は「Krita」の「Python」において、デフォルトで使えるモジュールの1つである「PyQt5」モジュールを使って、UI(ユーザーインターフェース)である「ウィジェット(Widget)」を構築します。さらにUIの中でも「ダイアログ」に特化して解説します。

本当は最初に解説する素のダイアログ「QDialog」クラスに貼り付けるボタンやスライダーなどを先に解説すべきですが、便宜上様々なダイアログから解説することにしました。

ダイアログについて

ダイアログとは「対話」という意味で、ユーザーである人間とコンピューターの対話を仲立ちするグラフィカルなユーザーインターフェースの1つです。ダイアログにはボタンやスライダーを貼り付けたり、ファイルを開き保存するために選択するダイアログがあったり、色をパレットから選択するダイアログがあったり、文字や数値を入力するためのダイアログがあったり、動作の進捗状態を目盛りで見れるプログレスダイアログがあったり、フォントを選択できるダイアログがあったりします。

できれば「クラス(class)」についての知識もあったほうが良いですが、今回はダイアログの使い方だけなので、クラスについては以降の回で改めて解説します。

素のダイアログ

まず基本となる何もない素のダイアログから解説します。今回はダイアログを表示するだけですが、次回ではこのQDialogにボタンやスライダーなどを貼り付ける解説をします。

QDialogはインスタンスを生成しただけでは何もできません。プログラムが実行されたままの状態にするためにインスタンス変数の「exec_」メソッドを実行してやらなければなりません。これでダイアログが表示されたままになります(図1)。

図1:素のダイアログ

・サンプルスクリプト「dlg.py」
# モジュール
from PyQt5.QtWidgets import QDialog
# ダイアログ
dlg = QDialog()
# ダイアログのタイトル
dlg.setWindowTitle("ダイアログ")
# ダイアログの実行
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5.QtWidgets」モジュールの「QDialog」モジュールを読み込みます。
QDialogクラスのインスタンスを生成し「dlg」変数に代入します。
ダイアログウィンドウのタイトルバーのタイトルをセットします。
ダイアログを実行したままにします。

ファイル選択ダイアログ

ファイルを開くダイアログ(図2)について解説します。ファイルを開くダイアログは既存のファイルを選ぶだけです。ファイルを保存するダイアログも解説した方が良いかもしれませんが、ファイルの保存はKrita本体の機能を使った方が多機能なので不要と考え、今回はあえて省略しました。

図2:ファイル選択ダイアログ

・サンプルスクリプト「dlg_file.py」
# モジュール
from PyQt5.Qt import *
# ファイルダイアログ
filter = str('Supported Files (*.shp *.kml *.jpg *.png);;All files (*)')
fileName = QFileDialog.getOpenFileName(None,str(''),str(''),filter)
print(fileName[0])

【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)を読み込みます。
読み込めるファイル形式を「filter」変数に代入します。
スタティックメソッド「QFileDialog.getOpenFileName」メソッドでファイルダイアログを開きます。
選んだファイル名をコンソールに表示します。

カラー選択ダイアログ

カラーパレットから色を選べるダイアログ(図3)について解説します。カラー選択ダイアログではデフォルトで48色が用意されているほか、約1670万色から任意の色をピックアップすることもできます。一般にパソコンではRGBが各8bitの24bitカラーが扱えます。ちなみにRGBAの32bitカラーは不透明度(Alpha)を使ってRGBの24bitカラーの中から色を構成します。

図3:カラー選択ダイアログ

・サンプルスクリプト「dlg_color.py」
# モジュール
from PyQt5.Qt import *
from PyQt5.QtWidgets import QColorDialog
# カラーダイアログ
color = QColorDialog().getColor()
rgb = color.getRgb()
print("赤"+str(rgb[0])+",緑"+str(rgb[1])+",青"+str(rgb[2]))

【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QColorDialog」モジュールを読み込みます。
カラー選択ダイアログで色を選択し、選んだ色の(赤,緑,青)の値をコンソールに表示します。

インプットダイアログ

文字の入力を受け付け、それを取得するインプットダイアログ(図4)を解説します。インプットダイアログには「文字」だけでなく「整数」や「小数」などの数値も取得する「スタティックメソッド」が用意されています。スタティックメソッドとはクラスのメソッドの一種で関数のように使えるクラスのメソッドです。

図4:文字入力ダイアログ

・サンプルスクリプト「dlg_input.py」
# モジュール
from PyQt5.Qt import *
from PyQt5.QtWidgets import QInputDialog
# インプットダイアログ
text = QInputDialog().getText(None,"文字を入力してください","ここに書く")
if text[1] == True:
  print(text[0])
else:
  print("何も入力されていません")

【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QInputDialog」モジュールを読み込みます。
インプットダイアログで文字が入力されたらコンソールにそのテキストを表示します。

プログレスダイアログ

進捗状況を目盛りで知らせるプログレスダイアログ(図5)を解説します。よくダウンロードしているときに何%ぐらい進んでいるかの進捗状況が表示されますね。プログレスダイアログにそっくりなものは、ファイルを読み込んでいるときの進捗状況が出てきます。

図5:プログレスダイアログ

・サンプルスクリプト「dlg_progress.py」
# モジュール
from PyQt5.Qt import *
from PyQt5.QtWidgets import QProgressDialog
import time
# 100÷10%ずつ
num = 10
# プログレスダイアログ
progress = QProgressDialog("進行中...", "キャンセル", 0, num, None)
progress.setWindowModality(Qt.WindowModal)
# 10秒間
for i in range(0, num):
  progress.setValue(i)
  if progress.wasCanceled():
    break
  time.sleep(1)

【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QProgressDialog」モジュールと、「time」モジュールを読み込みます。
進捗状況を10個の目盛りで表示します。1秒ごとに10%ずつメモリが増えていき10秒経ったら終了します。

著者
大西 武 (オオニシ タケシ)
1975年香川県生まれ。大阪大学経済学部経営学科中退。プログラミング入門書など30冊以上を商業出版する作家。Microsoftで大賞やNTTドコモでグランプリなど20回以上全国区のコンテストに入賞するアーティスト。オリジナルの間違い探し「3Dクイズ」が全国放送のTVで約10回出題。
https://profile.vixar.jp

連載バックナンバー

開発言語技術解説
第7回

「Krita」と「Python」でダイアログUIを構築してみよう

2024/10/11
第7回の今回は「Krita」の「Python」で「PyQt5」モジュールの「ウィジェット」を使って、ダイアログUIを構築する解説をします。
開発言語技術解説
第6回

「Krita」と「Python」でアニメーションを描いてみよう

2024/9/24
第6回の今回は「Krita」で「Python」をプログラミングして、正方形が回転するアニメーションを作成する解説をします。
開発言語技術解説
第5回

「Krita」と「Python」で「ベジェ曲線」を描いてみよう

2024/9/5
第5回の今回は「Krita」でベジェ曲線のフキダシを描いたり、指定したフォントで文字を書いたりする解説をします。

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

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

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

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