[英]Run two scripts simultaneously in tkinter
我需要兩個腳本同時單擊一個按鈕同時運行。 無法使用兩個按鈕,因為在單擊第一個按鈕后 gui 會凍結並等待第一個程序完成。 這是代碼:
import tkinter
import os
import subprocess
window = tkinter.Tk()
window.title("GUI")
def clicked():
os.system('python inference.py')
os.system('python extract_frames.py')
# I used the subprocess approach also but it still waits for the first program to finish
subprocess.run("python inference.py & python extract_frames.py",shell=True)
bt = tkinter.Button(window,text="Click Here to start detecting",command=clicked).pack()
window.geometry('400x400')
window.mainloop()
嘗試這樣調整它:
import tkinter
import os
from subprocess import call
import threading
window = tkinter.Tk()
window.title("GUI")
def clicked():
#os.system('python inference.py')
#os.system('python extract_frames.py')
# I used the threading approach
threading.Thread(target=call, args=("python inference.py" ,), ).start()
threading.Thread(target=call, args=("python extract_frames.py" ,), ).start()
bt = tkinter.Button(window,text="Click Here to start detecting",command=clicked).pack()
window.geometry('400x400')
window.mainloop()
你的代碼看起來像這樣。它只是一個簡單的實現。
from threading import Thread
import tkinter
import os
import subprocess
window = tkinter.Tk()
window.title("GUI")
def fun1():
os.system('python inference.py')
def fun2():
os.system('python extract_frames.py')
def clicked():
Thread(target = fun1).start()
Thread(target = fun2).start()
bt = tkinter.Button(window,text="Click Here to start detecting",command=clicked).pack()
window.geometry('400x400')
window.mainloop()
您可以使用兩個subprocess.Popen(...)
在單獨的進程中運行這兩個腳本:
import subprocess
import tkinter as tk
proclist = []
def clicked():
proclist.clear()
for script in ('inference.py', 'extract_frames.py'):
proc = subprocess.Popen(['python', script])
proclist.append(proc)
def kill_tasks():
for proc in proclist:
if proc and proc.poll() is None:
print('Killing process with PID', proc.pid)
proc.kill()
proclist.clear()
root = tk.Tk()
root.geometry('400x400')
root.title('GUI')
tk.Button(root, text='Start detecting', width=20, command=clicked).pack()
tk.Button(root, text='Kill tasks', width=20, command=kill_tasks).pack()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.