「Krita」と「Python」でUIパーツを構築してみよう

2024年11月1日(金)
大西 武 (オオニシ タケシ)
第8回の今回は「Krita」で「Python」をプログラミングして、ボタンやスライダーなどのUIパーツを構築する解説をします。

はじめに

前回は、UIの中でもファイルダイアログなどの様々なダイアログUIの構築方法を解説しました。今回はまっさらなダイアログに貼り付けるボタンやスライダーなどのUIパーツの構築方法を解説します。

なお、前回のUIは最初から決まったフォーマットのレイアウトが用意されていましたが、今回はオリジナルのレイアウトのダイアログを作成します。例えば、スライダーを移動するとスライダーの数値がラインエディットに表示されるようなレイアウトです。

clickedで処理するUIパーツを構築する

今回解説するUIパーツは「ラベル」「ボタン」「カレンダー」「ラジオボタン」「リストビュー」「テキストエディット」「コンボボックス」「スピンボックス」「ラインエディット」「スライダー」「チェックボックス」です。いずれも前回で最初に解説した素のダイアログ「QDialog」に貼り付けます。今回も「クラス(class)」については解説しませんが、後に今回のUIパーツとほぼ同じスクリプトをクラスを多用して(「継承」させて使います)構築する際に改めて解説します。

今回は代表的なUIパーツだけを解説しますが、他にもUIパーツはたくさん存在します。次のURLを参考に他のウィジェットも実装してみてください。

・Qt for Python(ただしこのURLのQtのほうがバージョンが新しいです)
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/

ラベルを構築

「ラベル(QLabel)」とは「はり紙」のことです。つまり文字を書いて説明書きなどをする際に使います。他にも操作に応じて説明を変えたり、入力した値を表示したりできます(図1)。

基本的に「レイアウト」クラス(ここでは「QHBoxLayout」クラス)のインスタンスにラベルUIを追加(addWidget)し、それをダイアログにセット(setLayout)して表示します。これは以降のUIパーツで共通です。

図1:ラベルを構築

・サンプルスクリプト「dlg_label.py」
# モジュール
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog, QHBoxLayout, QLabel
# ラベルの作成
layout = QHBoxLayout()
label = QLabel("ラベル") 
layout.addWidget(label)
layout.setAlignment(label,Qt.AlignHCenter)
# ダイアログの作成と実行
dlg = QDialog() 
dlg.setLayout(layout)
dlg.setWindowTitle("ラベル") 
dlg.resize(200,200)
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5」内のモジュールを読み込みます。
水平にUIパーツを並べる「QHBoxLayout」クラスのレイアウトを作成してラベルUIを追加します。ラベルは水平において中央に整列(setAlignment)します。
QDialogクラスのダイアログ作成は前回同様です。今回は幅高さを200x200にリサイズ(resize)します。

ボタンを構築

「ボタン(QPushButton)」とは「押しボタン」です(図2)。ボタンを押すと処理を実行することができます。

図2:ボタンを構築

・サンプルスクリプト「dlg_button.py」
# モジュール
from PyQt5.QtWidgets import QDialog, QHBoxLayout, QPushButton
# ボタンが押されたら呼ばれる
def click_button():
  print("ボタンが押されました!")
# ボタンUIの作成
layout = QHBoxLayout()
button = QPushButton("ボタンを押してください") 
layout.addWidget(button)
# ボタンが押されたら「click_button」関数を呼び出す
button.clicked.connect(click_button)
# ダイアログの作成と実行
dlg = QDialog() 
dlg.setLayout(layout)
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5」内のモジュールを読み込みます。
「click_button」関数で"ボタンが押されました!"をコンソールに表示します。
「QPushButton」クラスでボタンUIを作成してレイアウトに追加し、ダイアログにセットします。
ボタンが押されたら(clicked)、「click_button」関数を呼び出します。

カレンダーを構築

「カレンダー(QCalendarWidget)」は「暦」のことです。月ごとに28~31日ずつ日曜日から土曜日まである普通のカレンダーです(図3)。

図3:カレンダーを構築

・サンプルスクリプト「dlg_calendar.py」
# モジュール
from PyQt5.QtWidgets import QDialog,QStackedLayout,QCalendarWidget
# カレンダーが押されたら呼ばれる
def click_calendar(value):
  year = str(value.year())
  month = str(value.month())
  day = str(value.day())
  print(year+"年"+month+"月"+day+"日")
# カレンダーUIの作成
layout = QStackedLayout()
calendar = QCalendarWidget()
layout.addWidget(calendar)
# カレンダーが押されたら「click_calendar」関数を呼び出す
calendar.clicked.connect(click_calendar)
# ダイアログの作成と実行
dlg = QDialog() 
dlg.setLayout(layout)
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5」内のモジュールを読み込みます。
「click_calendar」関数で、クリックした年月日をコンソールに表示します。
「QCalendarWidget」クラスでカレンダーUIを作成してレイアウトに追加し、ダイアログセットします。
カレンダーが押されたら(clicked)、「click_calendar」関数を呼び出します。

ラジオボタンを構築

「ラジオボタン(QRadioButton)」は、複数の選択肢のうちの1つだけを選べる項目1個1個のボタンのことです(図4)。複数のボタンを同時に選べるようにする場合は「チェックボックス」を使います。

図4:ラジオボタンを構築

・サンプルスクリプト「dlg_radiobutton.py」
# モジュール
from PyQt5.QtWidgets import QDialog,QGroupBox,QVBoxLayout,QRadioButton
# ラジオボタンが押されたら呼ばれる
def click_radio1():
  print("ラジオボタン1が押された")
def click_radio2():
  print("ラジオボタン2が押された")
def click_radio3():
  print("ラジオボタン3が押された")
# ラジオボタンUIの作成
groupBox = QGroupBox("1個だけ選択")
radio1 = QRadioButton("ラジオボタン1")
radio2 = QRadioButton("ラジオボタン2")
radio3 = QRadioButton("ラジオボタン3")
radio1.setChecked(True)
vbox = QVBoxLayout()
vbox.addWidget(radio1)
vbox.addWidget(radio2)
vbox.addWidget(radio3)
vbox.addStretch(1)
groupBox.setLayout(vbox)
layout = QVBoxLayout()
layout.addWidget(groupBox)
# ラジオボタンが押されたら関数を呼び出す
radio1.clicked.connect(click_radio1)
radio2.clicked.connect(click_radio2)
radio3.clicked.connect(click_radio3)
# ダイアログの作成と実行
dlg = QDialog() 
dlg.setLayout(layout)
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5」内のモジュールを読み込みます。
「click_radio1」「click_radio2」「click_radio3」関数でラジオボタン1、2、3が押されたことをコンソールに表示します。
「QRadioButton」クラスでラジオボタンUIを作成し、垂直にUIパーツを並べる「QVBoxLayout」レイアウトに追加して「QGroupBox」クラスにセットします。これをレイアウトに追加してダイアログにセットします。
ラジオボタンが押されたら(clicked)、「click_radio1」か「click_radio2」か「click_radio3」関数を呼び出します。

リストビューを構築

「リストビュー(QListView)」は「一覧表」のことで、Microsoft Office Excelの表に似ています(図5)。ただ大抵1列しかない一覧表です。

図5:リストビューを構築

・サンプルスクリプト「dlg_listview.py」
# モジュール
from PyQt5.QtCore import QStringListModel
from PyQt5.QtWidgets import QDialog, QHBoxLayout, QListView
# リスト
fruit_list = ['りんご', 'バナナ', 'イチゴ']
# リストビューが押されたら
def click_listview(index):
  print(fruit_list[index.row()])
# リストビューUIの構築
model = QStringListModel(fruit_list)
view = QListView()
view.setModel(model)
layout = QHBoxLayout()
layout.addWidget(view)
# リストビューがクリックされたら「click_listview」を呼び出す
view.clicked.connect(click_listview)
# ダイアログの作成と実行
dlg = QDialog()
dlg.setLayout(layout)
dlg.setWindowTitle("Dialog")
dlg.exec_()

【サンプルスクリプトの解説】
「PyQt5」内のモジュールを読み込みます。
「click_listview」関数でクリックした項目をコンソールに表示します。
「QStringListModel」で項目のリストをモデルに追加します。
「QListView」クラスでリストビューUIを作成し「setModel」メソッドでモデルをセットします。
リストビューをレイアウトに追加し、ダイアログにセットします。
リストビューが押されたら(clicked)、「click_listview」関数を呼び出します。

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

連載バックナンバー

開発言語技術解説
第9回

「Krita」と「Python」でクラスの文法を身につけよう

2024/11/22
第9回の今回は「Krita」と「Python」で、オブジェクト指向プログラミングができる「クラス」の文法を解説します。
開発言語技術解説
第8回

「Krita」と「Python」でUIパーツを構築してみよう

2024/11/1
第8回の今回は「Krita」で「Python」をプログラミングして、ボタンやスライダーなどのUIパーツを構築する解説をします。
開発言語技術解説
第7回

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

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

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

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

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

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