初めに
みなさんこんにちは!山崎です。最近GUI開発に興味がわき、「何かいいライブラリないかなあ」ってところにEELに出会いました。
EELについてはほかの人が良い記事をたくさん書いてくれているので、そちらを参考にしてみてください。
参考記事リンク
問題点
参考記事に書いてあるように、EELは非常に便利なんですが、Windows11環境(ほかの環境もかもしれないです)においてWindowサイズが固定できません。
公式ドキュメントには
eel.start('hello.html', mode='chrome-app', size=(300, 200))
のようにsizeをタプルで渡してあげればできるのですが、少なくともwindowsでは動きません。
そこで、windowsで動くコードを書きました。
WINDOW_SIZE_HEIGT
やWINDOW_SIZE_WIDTH
を変えればウィンドウサイズが設定できます。とりあえず動かしたいよ、って人は下記のコードを使えばOKです。
import os
import platform
import sys
import eel
# google driverの設定ファイルを保存するディレクトリを作成する
WINDOW_SIZE_HEIGT = 200
WINDOW_SIZE_WIDTH = 600
WINDOW_POSITION_HEIGHT = 100
WINDOW_POSITION_WIDTH = 100
WEB_FOLDER = "web"
START_HTML_PATH = "html/index.html"
PORT = 8080
def main():
# windowsのバージョンが10以上でなければエラーを出力
if sys.platform in ['win32', 'win64'] and int(
platform.release()) >= 10:
pass
else:
raise ("Can't start 'EEL' in this environment.")
try:
# google chromeの設定ファイルを作成
google_dir_path = os.path.join(
os.getcwd(), r"property\web_driver\chrome"
)
os.makedirs(google_dir_path, exist_ok=True)
os.system(f"attrib +r {google_dir_path}")
eel.init(WEB_FOLDER)
eel.start(
START_HTML_PATH,
mode='chrome',
port=PORT,
cmdline_args=[
f"--window-size={WINDOW_SIZE_HEIGT},{WINDOW_SIZE_WIDTH}",
"--window-position="
f"{WINDOW_POSITION_HEIGHT},{WINDOW_POSITION_WIDTH}",
f'--user-data-dir={google_dir_path}',
]
)
except EnvironmentError as e:
# google chromeが入っていない場合、Edgeを起動
if sys.platform in ['win32', 'win64'] and int(
platform.release()) >= 10:
eel.start('hello.html', mode='edge')
else:
raise ("Can't start 'EEL' in this environment.\n"
f"Error message: {e}"
)
if __name__ == "__main__":
main()
解説
さて、これは明らかにどちらかのバグのせいで、size=(hoge,hoge)
が機能していないのが問題です。なぜかはわかりませんが、コマンドライン引数に--user-data-dir=
を設定してあげるとウィンドウサイズの設定が可能になります。
多分ですが、windows11かgoogle chromeのバージョンが更新されたときにどちらかの仕様が変わったのだと思います。まあ、上のコードでとりあえずは動くので…バグ改善をまちましょう。改善されればここまで長いコードを書かなくて済みます。
お願い
コードを見てくれればわかると思いますが、Edgeのウィンドウサイズが設定できません。わかる方がいましたら情報提供お願いします。Twitterでもコメントでもよいので…
最後に
EElは勉強途中ですので、暇ができたら記事を書こうと思います。
今回のエラーで私は休日2日無駄にしましたので、第二の被害者を出さないように備忘録もかねて執筆させていただきました。今後ともよろしくお願いいたします。