如何 运行 来自 tkinter 的两个并行脚本?
How to run two parallel scripts from tkinter?
使用此代码,我能够创建一个带有按钮的 TK Inter 弹出窗口 运行 Sample_Function
。
这个 Sample_Function
破坏 tk 弹出窗口,运行 另一个 python 文件,然后再次打开它自己(第一个弹出窗口)。
我怎样才能同时 运行 other_python_file
和弹出窗口 'itself' — 这样我就可以在每个功能完成之前触发许多功能?
import sys, os
from tkinter import *
import tkinter as tk
root = Tk()
def Sample_Function():
root.destroy()
sys.path.insert(0,'C:/Data')
import other_python_file
os.system('python this_tk_popup.py')
tk.Button(text='Run Sample_Function', command=Sample_Function).pack(fill=tk.X)
tk.mainloop()
我认为这将接近您的要求。它使用 subprocess.Popen()
而不是 os.system()
到 运行 另一个脚本并重新 运行 pop-up 在等待它们完成时不会阻止执行,所以他们现在可以同时执行。
我还添加了一个 退出 按钮来退出循环。
import subprocess
import sys
from tkinter import *
import tkinter as tk
root = Tk()
def sample_function():
command = f'"{sys.executable}" "other_python_file.py"'
subprocess.Popen(command) # Run other script - doesn't wait for it to finish.
root.quit() # Make mainloop() return.
tk.Button(text='Run sample_function', command=sample_function).pack(fill=tk.X)
tk.Button(text='Quit', command=lambda: sys.exit(0)).pack(fill=tk.X)
tk.mainloop()
print('mainloop() returned')
print('restarting this script')
command = f'"{sys.executable}" "{__file__}"'
subprocess.Popen(command)
使用此代码,我能够创建一个带有按钮的 TK Inter 弹出窗口 运行 Sample_Function
。
这个 Sample_Function
破坏 tk 弹出窗口,运行 另一个 python 文件,然后再次打开它自己(第一个弹出窗口)。
我怎样才能同时 运行 other_python_file
和弹出窗口 'itself' — 这样我就可以在每个功能完成之前触发许多功能?
import sys, os
from tkinter import *
import tkinter as tk
root = Tk()
def Sample_Function():
root.destroy()
sys.path.insert(0,'C:/Data')
import other_python_file
os.system('python this_tk_popup.py')
tk.Button(text='Run Sample_Function', command=Sample_Function).pack(fill=tk.X)
tk.mainloop()
我认为这将接近您的要求。它使用 subprocess.Popen()
而不是 os.system()
到 运行 另一个脚本并重新 运行 pop-up 在等待它们完成时不会阻止执行,所以他们现在可以同时执行。
我还添加了一个 退出 按钮来退出循环。
import subprocess
import sys
from tkinter import *
import tkinter as tk
root = Tk()
def sample_function():
command = f'"{sys.executable}" "other_python_file.py"'
subprocess.Popen(command) # Run other script - doesn't wait for it to finish.
root.quit() # Make mainloop() return.
tk.Button(text='Run sample_function', command=sample_function).pack(fill=tk.X)
tk.Button(text='Quit', command=lambda: sys.exit(0)).pack(fill=tk.X)
tk.mainloop()
print('mainloop() returned')
print('restarting this script')
command = f'"{sys.executable}" "{__file__}"'
subprocess.Popen(command)