概要
Python でブラウザベースの GUI アプリケーションを作成できるライブラリ Eel について解説します。
Eel
Eel は、Electron のようなオフラインの HTML、Javascript を使用した GUI アプリケーションを作るための Python ライブラリです。機械学習や画像処理など Python が得意な部分とモダンな GUI を作成できる HTML、Javascript の得意な部分を組み合わせたアプリケーションが作成できます。
他の GUI ライブラリとの比較
Python で GUI アプリケーションを作成するためのライブラリで有名なものでは、tkinter、PySimple GUI、PyQt があります。これらはいずれも OS が提供するネイティブの UI コンポーネントを使用してライブラリを作成するライブラリです。ネイティブ UI は、テキストボックスやプルダウンメニューといった GUI に必要な部品は一通り提供されていますが、カスタマイズできるデザインの幅は少なく、画一的な見た目になります。一方、Eel はブラウザベースであるため、GUI を得意とする HTML、Javascript の資産を活用して、凝った見た目の UI を簡単に作ることができるというメリットがあります。
インストール
Eel をインストールします。
基本的な使い方
eel_templates/eel_basic に以下の手順で作成したテンプレートファイルがあります。
1. プロジェクトディレクトリを作成する
適当なディレクトリに以下のディレクトリ構成で .py ファイルと .html ファイルを作成します。
2. .html ファイルを編集する
web/index.html
ファイルを作成します。.html ファイルには、<script type="text/javascript" src="/eel.js"></script>
が挿入されている必要があります。eel.js
自体は web ディレクトリに存在しませんが、それで問題ありません。
3. .py ファイルを編集する
4. 起動する
app.py
を実行すると、GUI 画面が表示されます。

Javascript の関数を Python から呼び出す
引数がない関数
Javascript の関数を Python から利用したい場合は、eel.expose(<関数名>);
を呼び出したい関数の先頭につけます。Python 側からは eel.<関数名>(<引数一覧>)
で呼び出せます。関数は非同期で実行されます。
引数がある関数
Python 側では Javascript の関数は非同期で呼び出されるため、呼び出し完了後に実行する関数を引数で指定します。
Python の関数を Javascript から呼び出す
引数がない関数
Python の関数を Javascript から利用したい場合は、@eel.expose
デコレーターを呼び出したい関数につけます。Javascript 側からは eel.<関数名>(<引数一覧>)
で呼び出せます。関数は非同期で実行されます。
引数がある関数
Javascript 側では Python の関数は非同期で呼び出されるため、async 関数内で await を使用して結果を受け取る必要があります。
オブジェクトをやり取りする場合
オブジェクトをやり取りする場合、そのオブジェクトが JSON 化できるという要件 (json.dumps() で変換できる) を満たす必要があります。JSON 化ができないオブジェクトを引数や返り値に指定した場合、エラーになります。
Vue3 を Eel で使用する
1. インストールする
eel_templates/eel_vue に以下の手順で作成したテンプレートファイルがあります。
Node.js と Vue CLI がインストールされていない場合は、インストールします。
2. プロジェクトディレクトリを作成する
3. Vue をインストールする
Vue をインストールします。インストール時の設定は好みで選択してください。
4. index.html を編集する
vue/public/index.html
を編集し、<script type="text/javascript" src="/eel.js"></script>
を挿入します。
5. vue/vue.config.js を追加する
ビルドした際の出力ディレクトリが <project_dir>/web
になるように vue/vue.config.js
を作成し、設定を記載します。
6. ビルドする
ビルドを行うと、<project_dir>/web
にコンパイルしたファイルが出力されます。
7. .py ファイルを編集する
<project_dir>/app.py
を作成します。
8. 起動する
app.py
を実行すると、GUI 画面が表示されます。

コメント