Python eelでファイル選択ダイアログ

Created 2019年4月19日16:37
Updated 2019年4月22日18:33
Categories Python eel

eelでGUIアプリを作る際にファイル選択ダイアログを実装した時のメモ。

結論から言うとeelにはファイル選択ダイアログの機能はないので、tkinterを使って実装しました。

追記(2019/04/22)
GitHubにダイアログとかまとめたリポジトリを作りました。よければ参考にしてください。

Python

Javascript側から呼び出してファイル選択ダイアログを表示します。

追記2019年4月20日:Windowsで試したら動かなかったのでいろいろ変更しました
(ただし応急処置なのでtkinterでダイアログ作る記事は別で書こうと思います)

from tkinter import filedialog, Tk
import platform

# ダイアログ用のルートウィンドウの作成
# (root自体はeelのウィンドウとは関係ないので非表示にしておくのが望ましい)
root = Tk()
# ウィンドウサイズを0にする
root.geometry("0x0")
# ウィンドウのタイトルバーを消す
root.overrideredirect(1)
# ウィンドウを非表示に
root.withdraw()
system = platform.system()


@eel.expose
def select_file():
    # Windowsの場合withdrawの状態だとダイアログも
    # 非表示になるため、rootウィンドウを表示する
    if system == "Windows":
        root.deiconify()
    # macOS用にダイアログ作成前後でupdate()を呼ぶ
    root.update()
    # ダイアログを前面に
    root.lift()
    root.focus_force()
    path_str = filedialog.askopenfilename()
    root.update()
    if system == "Windows":
        # 再度非表示化(Windowsのみ)
        root.withdraw()
    path = Path(path_str)
    return path.absolute()

WindowsやmasOS固有の設定が多く、コードが冗長になった気がします。

今後も使うことになると思うので、モジュールとかにまとめたいですね・・・

Javascript

eel.select_file()((absPath) => {
    console.log(absPath);
});

まとめ

記事の内容的にはほぼeel関係ないしそりゃできるだろって感じですよね。。

eelはフレームワークとしての機能が少ないので、足りない部分は別のGUIライブラリを使っても良いかもと言う話でした。

コメントを投稿

コメント