在运行进程时需要帮助与 Python GUI 交互



我正在开发一个应用程序,当您按下GUI上的"开始"按钮时,该应用程序将运行一批测试。问题在于,一旦调用了运行测试的子进程,Python GUI 就会冻结,直到子进程完成执行。顺便说一下,我正在使用Python 2.7。

我想在测试

运行时与 GUI 交互,在不中断测试的情况下按下不同的按钮等。

以下是我对这部分内容的摘录:

import Tkinter
import tkMessageBox
import subprocess

top = Tkinter.Tk()
def batchStartCallBack():
    tkMessageBox.showinfo("Batch Application", "Batch STARTED!")
    for x in range(0, 3):
        p = subprocess.call('batch path', stdout = None, stderr = None, shell=False)
def batchStopCallBack():
    tkMessageBox.showinfo("Batch Application", "Batch Stopped!")
    # STOP BATCH
StartButton = Tkinter.Button(top, text = "Start Batch", command = batchStartCallBack, width = 8, height = 2)
StopButton = Tkinter.Button(top, text = "Stop Batch", command = batchStopCallBack, width = 8, height = 2)
StartButton.pack()
StopButton.pack()
top.mainloop()

你应该使用非阻塞subprocess.Popen。对subprocess.call的调用将使当前脚本等待子进程完成。在 gui 中,运行一个无限循环检查输入,这意味着您的 gui 将如您所见无响应。可以初始化一个子进程池,并为 gui 使用一个单独的子进程,为运行使用另一个子进程......

最新更新