【问题标题】:Need help interacting with Python GUI while there is a process being run在运行进程时需要帮助与 Python GUI 交互
【发布时间】:2015-06-20 10:42:26
【问题描述】:

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

【问题讨论】:

    标签: python multithreading user-interface subprocess


    【解决方案1】:

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

    【讨论】:

    • 非常感谢您的回答,我最终做了以下事情:p = subprocess.Popen('batch path', stdout = None, stderr = None, shell=False)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多