質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1090閲覧

Pythonでブラウザ起動ができません(webbrowserとeelを独立して使用)

papo

総合スコア19

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/10/07 10:55

編集2022/10/07 10:59

前提

こんにちは、よろしくお願いします。
webアプリを作成しておりまして、eelモジュールに出会ったのですが、疑問に思うことがあり質問させていただきました。

下記のtestapp.py を実行すると、ブラウザが起動して、”Googleタブ”と”Helloタブ”が開きます。
ここで、
Main
web_open()
eel_open()

eel_open()
web_open()

という風に入れ替えると、”Helloタブ”のみが開きます(”Googleタブ”が開かない)

それぞれのタブを開くモジュールは独立していると思うのですが、影響があるようです。
やりたいことは、”helloタブ”も開きつつ、”Googleタブ”の方を表示させたい、です。
みなさまのお知恵を拝借させていただければ幸いです。

(webbrowser/eelの2つのモジュールを使うことは前提としてお願いします)

簡素化しているため目的が分かりにくいかと存じますが、アドバイスいただけますようお願い致します。

ファイル構成

――――testapp.py
’ |
’  ――folder(test)―hello.html

該当のソースコード

testapp.py

1#インポート++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2import webbrowser 3import sys 4import os 5import eel 6 7#HTMLを開く++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 8def web_open(): 9 webbrowser.open("https://www.google.com",0) 10 11#eelを使って開く++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 12def eel_open(): 13 eel.init("test") 14 eel.start("hello.html", close_callback=onClose_Window, port=0, mode="chrome""edge") 15 16#eel閉じるオプション++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 17def onClose_Window(page, sockets): 18 sys.exit() 19 20#Main+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 21if __name__ == '__main__': 22 try: 23 web_open() 24 eel_open() 25 26 except: 27 print('Error')

hello.html

1<!DOCTYPE html> 2<head> 3 <script type="text/javascript" src="/eel.js"></script> 4 <title>hello</title> 5</head> 6<body> 7 <p1>hello</p1> 8</body> 9</html>

補足情報

Python3.10.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

webbrowser モジュールを使ったコードは非同期に実行されますが、
eel モジュールを使うコードは、実行完了を待つ同期コードです。
単純に順番を入れ替えられる実装となってません。

  • web_open (非同期: バックグラウンドで開く処理) -> eel_open
  • eel_open (同期: ページが閉じられるまで待つ) -> web_open

また、sys.exit でプロセス自体を終了するので、
それ以降のコードが実行されない点にも注意。

eel_open (ページが閉じられるまで待つ)
-> close_callback内でsys.exit -> web_open は呼び出されない。

解決策は、元のコード通りweb_openを先に呼び出すで良いはずです。

投稿2022/10/07 12:24

編集2022/10/08 04:07
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papo

2022/10/21 07:22

teamikl様  お返事遅くなってしまい申し訳ございません。  同期・非同期を教えていただきましてありがとうございます。すっきりしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問