Created 2019年4月19日16:37
Updated 2019年4月22日18:33
Categories
Python
eel
eelでGUIアプリを作る際にファイル選択ダイアログを実装した時のメモ。
結論から言うとeelにはファイル選択ダイアログの機能はないので、tkinterを使って実装しました。
追記(2019/04/22)
GitHubにダイアログとかまとめたリポジトリを作りました。よければ参考にしてください。
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固有の設定が多く、コードが冗長になった気がします。
今後も使うことになると思うので、モジュールとかにまとめたいですね・・・
eel.select_file()((absPath) => {
console.log(absPath);
});
記事の内容的にはほぼeel関係ないしそりゃできるだろって感じですよね。。
eelはフレームワークとしての機能が少ないので、足りない部分は別のGUIライブラリを使っても良いかもと言う話でした。