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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

2回答

1834閲覧

Python3 Tkinter ボタンを押したら実行中アプリウィンドウを最前面に移動したい

person

総合スコア223

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2021/08/02 12:41

編集2021/08/02 12:44

WindowsでTkinterを使います。
Tkinterで次のようなアプリを作りたいです。

・アプリ起動後、ボタンを押したらIE(Internet Explorer)起動。
・IEが起動している間は、ボタンを押したら既存タブ(既存ウィンドウ)を最前面に移動。
・IEを閉じた後、ボタンを押したらまたIE起動。
(IEは、IEの閉じるボタンで閉じる。)

そのうちの、
・IEが起動している間は、ボタンを押したら既存タブ(既存ウィンドウ)を開く。
の実装方法がわかりません。できるのかどうかも知りませんが・・・。
そのため、下記ソースコードを作成したのですが、該当部分のみ処理がありません。
show_ie_on_the_front()です。

実装する知恵があればお願いします。
下記ソースコードに問題、改善点があったら、そちらも回答お願いします。

Python

1import subprocess 2import threading 3import tkinter as tk 4 5def on_button(): 6 thread = threading.Thread(target=control_task) 7 thread.start() 8 9def control_task(): 10 ret = check_task() 11 if ret == 1: 12 show_ie_on_the_front() 13 elif ret == 0: 14 open_ie() 15 else: 16 print("command error") # ここに該当する可能性はないと思っている 17 18def check_task(): 19 cmd = 'tasklist /fi "imagename eq iexplore.exe"' 20 outs, errs = mypopen(cmd, 3) 21 # Popenのreturncodeで実行の有無の判別はできない(どちらも正常に実行したら 0)ので出力をチェック 22 if outs: 23 data = outs.split("\n") 24 for i, row in enumerate(data): 25 if "iexplore.exe" in row: 26 return 1 27 return 0 28 return -1 29 30def show_ie_on_the_front(): 31 print("show_ie_on_the_front") 32 33def open_ie(): 34 cmd = "C:\Program Files\Internet Explorer\iexplore.exe" 35 ret = mypopen(cmd, 3) 36 print(ret) 37 38def mypopen(cmd, time): 39 outs = b"" 40 errs = b"" 41 42 proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 43 44 try: 45 #proc.wait(timeout=time) 46 outs, errs = proc.communicate(timeout = time) 47 except subprocess.TimeoutExpired as e: 48 print(type(e)) 49 print(e) 50 proc.kill() 51 outs, errs = proc.communicate() 52 53 outs = outs.decode("cp932") 54 errs = errs.decode("cp932") 55 56 return outs, errs 57 58if __name__ == "__main__": 59 root = tk.Tk() 60 61 button = tk.Button(root, text="Open", width=10, command=on_button) 62 button.grid() 63 64 root.mainloop()

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

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

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

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

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

guest

回答2

0

確認ですが、Edge ではなく Explorer ですか?

不特定のサイトをサポートをブラウズするのに、
サポートが切れるブラウザを使うのはセキュリティ上のリスクがあります。
もし、用途が自サイトのテストであれば、IE互換モードの利用を検討して下さい。

既存タブ(既存ウィンドウ)を開く。の実装方法がわかりません。

iexplore.exe でのタブでの起動は、レジストリ等の設定により抑制されていて、
現在は、ドキュメントも保守されていなく、以前合ったオプションも無効もしくは非推奨となってます。
iexplore.exe のコマンドラインオプション一覧

Edge の場合は、--new-page オプションや--new-window オプションで指定可能。
IE互換モードもオプションがありますが、非推奨。(有効にするためには追加で設定が必要)
特定のサイトのみを互換モードで開くように構成した方が、セキュリティ的には良いです。

Edge でも良い場合は、デフォルトの挙動に任せるのが汎用的な対応で、
標準ライブラリ webbrowser に open_new_tab 関数が有り、
可能であれば、URLを新しいタブで開きます。


ブラウザのオートメーションについては、

  • ActiveX (win32com.client) 経由で IExplorer を操作。windowsのみ。
  • selenium 大掛かりになりますが、より汎用で、且つ詳細なブラウザの制御を行いたい場合。

投稿2021/08/03 02:13

編集2021/08/03 02:17
teamikl

総合スコア8664

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

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

person

2021/08/03 10:42

> 確認ですが、Edge ではなく Explorer ですか? あくまでアプリケーションの呼び出し等ができるか確認するためのサンプルコードです。 そのためIEである必要はないのですが、できればIEでもできたほうがいいと思っています。
guest

0

ベストアンサー

実装する知恵として、似たような質問のリンクを貼ります。
https://teratail.com/questions/187348

投稿2021/08/02 14:36

odataiki

総合スコア938

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

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

person

2021/08/03 10:32

ありがとうございます。 win32gui等は使ったことがないので、機能や使い方を調べてみて実装するかどうか判断します。 また今回はIEなので大丈夫かもしれませんが、入力を受け付けるプロセスでないと最前面に出せないなど自由度が低い部分もちょっと気になります・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問