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()
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/03 10:42