Python - 使用父进程确定子进程何时完成Tkinter GUI仍可交互

时间:2016-07-28 21:44:52

标签: python multithreading tkinter subprocess python-3.5

我有一个Tkinter GUI,我想生成一个子进程并找出子进程何时结束而不等待子进程终止,这意味着我的GUI仍然完全可以交互/不被冻结。

我尝试了很多方法,例如以下(主要是stackoverflow)链接中的方法:1234

我发现我无法使用任何使用for或while循环读取行的方法,或者最终会使用我的GUI等待循环读完所有内容。根据我的确定,我需要某种线程。但是,通过上面的链接使用一些示例似乎并不能解决我的问题;例如,调整[4]中的代码使我的代码工作和理解将导致我的GUI冻结,直到程序终止。

我的代码格式:

class MyClass(tk.Frame):
  def _init_(self,parent):
    # calls constructor of inherited class
    # other relevant code to initiate
    self.initUI()
  def runButtonFunction(self):
    # self.process = Popen(program_I_want_to_open)
    # ?? Need some way to determine when subprocess has 
    # exited so I can process the results created by that subprocess
  def stopButtonFunction(self):
    # terminates the subprocess created in run and its children at 
    # any moment subprocess is running 
  def initUI(self):
    # creates all UI widgets, one of which is a button starts the 
    # subprocess and another button that can terminate the subprocess

我应该采用什么方法来实现我想要的功能?任何概念性建议,伪代码或代码的实际示例都会非常有用。

我可以澄清任何有意义的事情。

1 个答案:

答案 0 :(得分:0)

在Linux上,您会发信号通知儿童进程死亡。 在Signal处理程序中捕获该信号。

如果您需要跨平台代码(包括Windows),您应该创建一个与self.process通信的新线程。