如何从tkinter运行两个并行脚本?

问题描述

使用此代码,我可以创建一个TK Inter弹出式窗口,并带有一个用于运行Sample_Function的按钮。

Sample_Function破坏了tk弹出窗口,运行另一个python文件,然后再次打开自身(第一个弹出窗口)。

如何才能同时运行other_python_file并弹出“自身”信息-这样我就可以在完成每个功能之前触发许多功能

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()来运行其他脚本并重新运行弹出窗口,该弹出窗口在等待它们完成时不会阻止执行,因此它们现在可以并行执行。

我还添加了一个 Quit 按钮以退出循环。

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)