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

第8回の今回は「Krita」で「Python」をプログラミングして、ボタンやスライダーなどのUIパーツを構築する解説をします。

大西 武 (オオニシ タケシ)

2024年11月1日 9:25

はじめに

前回は、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」関数を呼び出します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30