2. Hellow World
今回は、もっとも簡単なアプリケーションである「Hellow World」を作成していく。
Qt Creator の起動
Qt Creator のアイコンをクリックし、Qt Creator を起動する。
プロジェクトの作成
「File」メニューの「New Project…」を選択する。
以下のダイアログが表示されるので、「Application (Qt for Python)」の「Empty Application」を選択し、「Choose…」を押す。
「Name」に「2_Hellow_world」と入力し、「Browse..」ボタンで作成するディレクトリを指定する。
その後、「Next>」を押す。
特に問題が無い場合は「Next>」を押せば良いが、仮想環境を用いている場合はその環境のPythonを選択する必用がある。
※ もしも将来的にMacOSでのアプリケーションやLinuxでAppImageでのアプリケーションの作成を予定しているのであれば、仮想環境で作成した方が良いでしょう。と言うのも両方とものアプリケーションはライブラリの不足をなくすために仮想環境を利用しているからです。
※ Linux、MacOS、Windows でも仮想環境を構築して実行ファイルを作成する事が出来ます。(PyInstallerを使用する)。この場合、仮想環境には最新のPythonをインストールするようにして下さい。(さもないとエラーになることがあります。)
※ Linux では、AppImage でリリースする方法として、「appimage-builder」を利用する方法もありますが、本講座ではマシン環境で構築する方法で紹介する予定です。(rpmパッケージなどでの配布の参考にしてもらうため。)
※ 仮想環境でPythonライブラリを追加する場合は「Python のモジュールについて」のページの「pip で仮想環境にインストール」を熟読して下さい。
特に変更する必要はないので「Finish」を押す。
以下の画面が表示されれば準備完了だ。
ダイアログの作成
「File」メニューの「New File…」を選択する。
「Qt」の「Qt Designer Form」を選択し、「Choose…」を押す。
「Dialog without Buttons」を選択し、「Next >」を押す。
ファイル名は「dialog.ui」のままで良いので「Next >」を押す。
変更する部分が無いので、「Finish」を押す。
場合によっては次のような警告が出るので「Yes to All」を押す。
すると空のダイアログが作成された。
ウィジェットの配置
このままでは味気が無いので、ラベルやボタンの配置などを行う。
ダイアログタイトルの変更
右下の部分をスクロールしていくと「windowTitle」とかかれた部分があるので「初めてのダイアログ」に変更しておく。
ラベルの配置
左下の部分をスクロールしていくと「Label」と書かれたモノがあるのでダイアログにドラッグ&ドロップする。
「Text label」と書かれたアイテムをダブルクリックし「Hellow World!」に変更する。
今度は「Push Button」をドラッグ&ドロップし、「閉じる」に変更しておく。
ダイアログの部分を右クリックしてメニューを表示させ「Lay out」の「Lay Out Vertically」(縦に並べる)を選択する。
これでダイアログは完成だ。保存しておこう。
シグナルとスロット
Qt ではイベントの処理は「シグナル/スロット」で行われる。
例えばボタンを押した場合は「clicked」シグナルが発生し、そのシグナルをスロット(関数やメゾット)が受信する事で処理を行う。
読んだだけでは何の事かよく判らないだろう。
だが心配する必要は無い。「Qt Designer」だけでも簡単な処理なら行えるからだ。
それで感覚を掴んで貰えば、実際にプログラミングをする時にも役立つと思う。
ウィジェット名の変更
右上にあるウィジェット一覧で名前を変更しておく。
「Dialog」を「my_Dialog」、「label」を「my_label」、「pushButton」を「my_pushButton」に変更する。
シグナル/スロットの設定
中央のしたにある「Signals and Slots editor」の「+」ボタンを押す。
そして一覧から該当するモノを選択する。
この例では、「my_pushButton」が「clicked()」(クリックされた)シグナルが発生した場合、「my_Dialog」の「close()」(ウインドウを閉じる)スロットで処理する事を表している。
この様に簡単な処理ならわざわざプログラミングする必要すらないのである。
これで Qt Designer でやる事は終わったので、「×」ボタンでクローズしてしまおう。
プログラムの変更
細かな説明は後で補足するとして、プログラムを次の様に変更して下さい。
# This Python file uses the following encoding: utf-8 import sys from PySide6.QtWidgets import QApplication from PySide6.QtCore import QFile from PySide6.QtUiTools import QUiLoader if __name__ == "__main__": # ローダーの作成 loader = QUiLoader() # アプリケーションの開始 app = QApplication(sys.argv) # ダイアログファイルを読み込み専用でオープンし、ダイアログデータの読み込み ui_file = QFile("dialog.ui") ui_file.open(QFile.ReadOnly) window = loader.load(ui_file) ui_file.close() # ダイアログの表示 window.show() # イベントループの実行 sys.exit(app.exec())
保存して三角ボタンを押せば、プログラムが実行できる。
どうだろうか? 単純に表示するだけのプログラムだが、ウィジェット(部品)のデザインとプログラムを完全に分割できるのが PyQt の強みだ。
勿論複雑なプログラムの場合はシグナル/スロット処理を書く必要はあるのだが、凝ったデザインを利用できるなどの利点も多い。
補足
以下の方法をすればコマンドラインからプログラムを実行できます。(Linux & MacOS)
- プログラムの一行目に「#!/usr/bin/env python」を追加する。
- 「chmod +x main.py」を実行し、実行権を付与しておく。
「main.py」があるディレクトリで以下のコマンドを実行する。
$ ./main.py
詳細な説明など
PyQt の細かな説明は、「Qt for Python」で確認して下さい。