「Krita」と「Python」でダイアログUIを構築してみよう
はじめに
今回は「Krita」の「Python」において、デフォルトで使えるモジュールの1つである「PyQt5」モジュールを使って、UI(ユーザーインターフェース)である「ウィジェット(Widget)」を構築します。さらにUIの中でも「ダイアログ」に特化して解説します。
本当は最初に解説する素のダイアログ「QDialog」クラスに貼り付けるボタンやスライダーなどを先に解説すべきですが、便宜上様々なダイアログから解説することにしました。
ダイアログについて
ダイアログとは「対話」という意味で、ユーザーである人間とコンピューターの対話を仲立ちするグラフィカルなユーザーインターフェースの1つです。ダイアログにはボタンやスライダーを貼り付けたり、ファイルを開き保存するために選択するダイアログがあったり、色をパレットから選択するダイアログがあったり、文字や数値を入力するためのダイアログがあったり、動作の進捗状態を目盛りで見れるプログレスダイアログがあったり、フォントを選択できるダイアログがあったりします。
できれば「クラス(class)」についての知識もあったほうが良いですが、今回はダイアログの使い方だけなので、クラスについては以降の回で改めて解説します。
素のダイアログ
まず基本となる何もない素のダイアログから解説します。今回はダイアログを表示するだけですが、次回ではこのQDialogにボタンやスライダーなどを貼り付ける解説をします。
QDialogはインスタンスを生成しただけでは何もできません。プログラムが実行されたままの状態にするためにインスタンス変数の「exec_」メソッドを実行してやらなければなりません。これでダイアログが表示されたままになります(図1)。
・サンプルスクリプト「dlg.py」# モジュール from PyQt5.QtWidgets import QDialog # ダイアログ dlg = QDialog() # ダイアログのタイトル dlg.setWindowTitle("ダイアログ") # ダイアログの実行 dlg.exec_()
【サンプルスクリプトの解説】
「PyQt5.QtWidgets」モジュールの「QDialog」モジュールを読み込みます。
QDialogクラスのインスタンスを生成し「dlg」変数に代入します。
ダイアログウィンドウのタイトルバーのタイトルをセットします。
ダイアログを実行したままにします。
ファイル選択ダイアログ
ファイルを開くダイアログ(図2)について解説します。ファイルを開くダイアログは既存のファイルを選ぶだけです。ファイルを保存するダイアログも解説した方が良いかもしれませんが、ファイルの保存はKrita本体の機能を使った方が多機能なので不要と考え、今回はあえて省略しました。
・サンプルスクリプト「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カラーの中から色を構成します。
・サンプルスクリプト「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)を解説します。インプットダイアログには「文字」だけでなく「整数」や「小数」などの数値も取得する「スタティックメソッド」が用意されています。スタティックメソッドとはクラスのメソッドの一種で関数のように使えるクラスのメソッドです。
・サンプルスクリプト「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)を解説します。よくダウンロードしているときに何%ぐらい進んでいるかの進捗状況が表示されますね。プログレスダイアログにそっくりなものは、ファイルを読み込んでいるときの進捗状況が出てきます。
・サンプルスクリプト「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秒経ったら終了します。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 「Krita」と「Python」でUIパーツを構築してみよう
- 「Krita」と「Python」で「ベジェ曲線」を描いてみよう
- 「Krita」で「Python」をプログラミングしてはじめての画像を描こう
- 「Krita」と「Python」でアニメーションを描いてみよう
- 「Krita」と「Python」でアーティスティックな絵を描こう
- 「Krita」と「Python」のクラスで画像を加工しよう
- 「TAURI」にも必要な「Rust」の「クレート」を使う
- 「Ace」を使って「TAURI」で「テキストエディタ」アプリを作ろう
- 「TAURI」で「画像ビューア」のサンプルアプリを作ろう
- サイズ指定に役立つ!CSSでcalc()を使う方法【初心者向け】