前回の記事でQt for Pythonの公式パッケージ動作環境を整えましたので、実際にその環境でのGUIサンプルを作ってみました。
QtではGUI実装方法にWidgetベースとQMLベースのものが選択できます。
Qt Widgetによる実装
WidgetベースはQtでは旧式の実装方法であり、ソースコード中でGUIパーツのインスタンス化、レイアウトを行うもので、コードを書き慣れた人であればゴリゴリ書ききれますが、一定以上の規模になると構造設計をしっかり行わないと読みにくくなったり、後々のメンテナンスが大変になります。またGUIレイアウトも直感的には理解しづらいものです。
QMLによる実装
QMLベースは新しい実装方法であり、アルゴリズムを記述するソースコードとGUI定義を分離するためにQMLと言うjsonライクな独自文法のマークアップ言語を使用します。そのため画面デザインに関するものはQML、動作に関するものは下位層のC++やPythonで記述する事ができます。とは言っても、QML自体もJava Scriptをサポートしておりアルゴリズムの記述が可能です。この辺りは設計方針にもよるのですが、うまく使い分けしないと結局GUI部分と実機能部分の分離ができなくなりますので、そういう意味では「QMLだから分かりやすい〜」とかって事は無いでしょうね。結局はアーキテクトの腕の見せ所というか…😁
さて、そんな2種類の実装方法ですが、C++を使ったものは非常に沢山サンプルが見られましたが、Pythonを使ったものはまだ少ないみたい。特にQML + Pythonの実装は余り見られないようです。
QMLは結構癖があって、特に下位層のPythonと相互通信しなければならない場合(非同期処理に多いですが)結構実装がやっかいになります。この辺りは追々サンプルとか作れればとは思いますが、今回はとにかくまず画面を表示するための雛形を準備しました。
コードはgithubのリポジトリに上げたのでそちらをご参照ください。cloneしてもらえれば直ぐに試せるようにPipFileも追加してあります。
1 thought on “Qt for Python(PySide2)”