问题描述
使用此代码,我可以创建一个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)