2012-06-16 46 views
2

所以我遇到了一个主要问题。我正在尝试使用多处理/子处理来运行我的Tkinter应用程序旁边的文件,但是,只要我运行该进程,GUI就会冻结,直到完成该过程。有什么办法可以解决这个问题吗?我也看过其他问题,但是无济于事(我发现其中一个暗示root.update()但是不能按预期工作。Tkinter GUI在多处理/子处理时冻结

注意:我没有包含GUI元素,因为我已经制作了基本程序来试试这个。只有几行),并得到了同样的问题,这也可能是值得一提的是,我运行Windows

代码(断章取义):

def run_file(self): 
    self.root.update() 
    sub_process=subprocess.call(self.sub_proc_args) 

process=multiprocessing.Process(target=self.run_file()) 
process.start() 

回答

0

我发现了问题(除BrenBarn指出的目标问题外)。这里是我的解决办法:

(我拿出多)

def run_file(self): 
    sub_process=subprocess.Popen(self.sub_proc_args) #Open subprocess 
    self.root.update() #Update GUI  
self.run_file() #Initiate sub_process 

我发现,这是修复,因为使用电话,当你执行它,它必须返回一个返回值,这使得Tkinter不会继续它的主循环。这通过使用Popen来解决。

1

这样做self.run_file()您所呼叫run_file在多处理之前可以使用它。您需要使用target=self.run_file(注意,不带参数肌腱端)。