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

时间:2015-04-14 17:32:44

标签: python multithreading user-interface subprocess

我正在开发一个应用程序,当您按下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()

1 个答案:

答案 0 :(得分:1)

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