はじめに
今回は「Krita」の「Python」において、デフォルトで使えるモジュールの1つである「PyQt5」モジュールを使って、UI(ユーザーインターフェース)である「ウィジェット(Widget)」を構築します。さらにUIの中でも「ダイアログ」に特化して解説します。
本当は最初に解説する素のダイアログ「QDialog」クラスに貼り付けるボタンやスライダーなどを先に解説すべきですが、便宜上様々なダイアログから解説することにしました。
ダイアログについて
ダイアログとは「対話」という意味で、ユーザーである人間とコンピューターの対話を仲立ちするグラフィカルなユーザーインターフェースの1つです。ダイアログにはボタンやスライダーを貼り付けたり、ファイルを開き保存するために選択するダイアログがあったり、色をパレットから選択するダイアログがあったり、文字や数値を入力するためのダイアログがあったり、動作の進捗状態を目盛りで見れるプログレスダイアログがあったり、フォントを選択できるダイアログがあったりします。
できれば「クラス(class)」についての知識もあったほうが良いですが、今回はダイアログの使い方だけなので、クラスについては以降の回で改めて解説します。
素のダイアログ
まず基本となる何もない素のダイアログから解説します。今回はダイアログを表示するだけですが、次回ではこのQDialogにボタンやスライダーなどを貼り付ける解説をします。
QDialogはインスタンスを生成しただけでは何もできません。プログラムが実行されたままの状態にするためにインスタンス変数の「exec_」メソッドを実行してやらなければなりません。これでダイアログが表示されたままになります(図1)。
図1:素のダイアログ
・サンプルスクリプト「dlg.py」
2 | from PyQt5.QtWidgets import QDialog |
6 | dlg.setWindowTitle("ダイアログ") |
【サンプルスクリプトの解説】
「PyQt5.QtWidgets」モジュールの「QDialog」モジュールを読み込みます。
QDialogクラスのインスタンスを生成し「dlg」変数に代入します。
ダイアログウィンドウのタイトルバーのタイトルをセットします。
ダイアログを実行したままにします。
ファイル選択ダイアログ
ファイルを開くダイアログ(図2)について解説します。ファイルを開くダイアログは既存のファイルを選ぶだけです。ファイルを保存するダイアログも解説した方が良いかもしれませんが、ファイルの保存はKrita本体の機能を使った方が多機能なので不要と考え、今回はあえて省略しました。
図2:ファイル選択ダイアログ
・サンプルスクリプト「dlg_file.py」
4 | filter = str('Supported Files (*.shp *.kml *.jpg *.png);;All files (*)') |
5 | fileName = QFileDialog.getOpenFileName(None,str(''),str(''),filter) |
【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)を読み込みます。
読み込めるファイル形式を「filter」変数に代入します。
スタティックメソッド「QFileDialog.getOpenFileName」メソッドでファイルダイアログを開きます。
選んだファイル名をコンソールに表示します。
カラー選択ダイアログ
カラーパレットから色を選べるダイアログ(図3)について解説します。カラー選択ダイアログではデフォルトで48色が用意されているほか、約1670万色から任意の色をピックアップすることもできます。一般にパソコンではRGBが各8bitの24bitカラーが扱えます。ちなみにRGBAの32bitカラーは不透明度(Alpha)を使ってRGBの24bitカラーの中から色を構成します。
図3:カラー選択ダイアログ
・サンプルスクリプト「dlg_color.py」
3 | from PyQt5.QtWidgets import QColorDialog |
5 | color = QColorDialog().getColor() |
7 | print("赤"+str(rgb[0])+",緑"+str(rgb[1])+",青"+str(rgb[2])) |
【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QColorDialog」モジュールを読み込みます。
カラー選択ダイアログで色を選択し、選んだ色の(赤,緑,青)の値をコンソールに表示します。
インプットダイアログ
文字の入力を受け付け、それを取得するインプットダイアログ(図4)を解説します。インプットダイアログには「文字」だけでなく「整数」や「小数」などの数値も取得する「スタティックメソッド」が用意されています。スタティックメソッドとはクラスのメソッドの一種で関数のように使えるクラスのメソッドです。
図4:文字入力ダイアログ
・サンプルスクリプト「dlg_input.py」
3 | from PyQt5.QtWidgets import QInputDialog |
5 | text = QInputDialog().getText(None,"文字を入力してください","ここに書く") |
【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QInputDialog」モジュールを読み込みます。
インプットダイアログで文字が入力されたらコンソールにそのテキストを表示します。
プログレスダイアログ
進捗状況を目盛りで知らせるプログレスダイアログ(図5)を解説します。よくダウンロードしているときに何%ぐらい進んでいるかの進捗状況が表示されますね。プログレスダイアログにそっくりなものは、ファイルを読み込んでいるときの進捗状況が出てきます。
図5:プログレスダイアログ
・サンプルスクリプト「dlg_progress.py」
03 | from PyQt5.QtWidgets import QProgressDialog |
08 | progress = QProgressDialog("進行中...", "キャンセル", 0, num, None) |
09 | progress.setWindowModality(Qt.WindowModal) |
11 | for i in range(0, num): |
13 | if progress.wasCanceled(): |
【サンプルスクリプトの解説】
「PyQt5.Qt」モジュールの全て(*)と「PyQt5.QtWidgets」モジュールの「QProgressDialog」モジュールと、「time」モジュールを読み込みます。
進捗状況を10個の目盛りで表示します。1秒ごとに10%ずつメモリが増えていき10秒経ったら終了します。