修行の場

知人が言っていました。これは修行だと。

Reactを使ってPythonで書いたスクリプトのGUIを作る

背景

次のピースを探す。

  • グラフを作る作業とかの最低限のUI: Jupyter Widget
  • 作業できる最低限の機能があるUI: PyQT
  • 機能を楽に使えるUI: <- ここがPythonにない
  • 見栄えも良い製品レベルのUI

Reactを採用しました。実際に何かを作ります。

パーツの探し方

react: 16.8.3

コンポーネントの再利用がしやすいおかげで パーツがたくさん公開されています。ただ、 逆にコンポーネントが多すぎ & 珠玉混合なので、探し方が難しい。 今回はよくあるawesomeリストを参考に探しました。 必要に応じてロードしてくれる例の奴はinfinity-listっていうんですね。awesome listのおかげでわかりました。 

使ってみたコンポーネント

react-list

react-images

いい感じ。現時点ではほぼそのまま使えます。

所感

ReactとBottle側のやり取りがHTTPにて粗結合化されていることで、若干python側の実装コストは増える。react側も同様。 例えば、PythonGUIのFWを使う場合では、ユーザの動作イベントを処理するメソッドはどんなデータ型でも同じ引数という形でデータを受け取るが、HTTPメソッドの種類ややり取りするデータの種類によってデータの受け取り方が変わる。また、戻り値も通常ならreturnで返せば良いのと比較し、レスポンスヘッダに値を追加したりする必要もあります。rapid prototyping用と割り切り上記を便利にするライブラリや開発の仕方をするという手はあります。

全体としてみると、PyQTで凝ったインタラクションを持つUIを作るとなると、最低限の動作を作るのにも意外に面倒なところがあり、それと比較すると全体としてはコストは下がったのかなという感じもします。