所以我遇到了一个重大问题。我目前正在尝试使用多处理/子处理来运行我的Tkinter应用程序旁边的文件,但是,只要我运行该进程,GUI就会冻结,直到我完成该过程。有没有办法解决这个问题?我也查了关于SO的其他问题,但无济于事(我发现有人提出root.update()
,但是没有按预期工作。
注意:我没有包含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 :(得分:1)
通过执行self.run_file()
,您在多处理之前调用run_file
可以使用它。您需要使用target=self.run_file
(注意,没有括号)。
答案 1 :(得分: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不能继续它的mainloop。使用Popen
确定了这一点。