我想在应用程序的其余部分继续运行时生成另一个进程以异步显示错误消息。
我正在使用multiprocessing
Python 2.6 中的模块来创建进程,并尝试使用TKinter
.
此代码在 Windows 上运行良好,但在 Linux 上运行它,TKinter
如果我调用'showerror("MyApp Error", "Something bad happened.")'
. 如果我通过直接调用在同一进程中运行它,它确实showerrorprocess
会出现。鉴于此,它似乎TKinter
工作正常。我可以打印到控制台并从 生成的进程中执行其他操作multiprocessing
,因此它似乎也可以正常工作。
他们只是似乎没有一起工作。我需要做一些特别的事情来允许衍生的子进程创建窗口吗?
from multiprocessing import Process
from Tkinter import Tk, Text, END, BOTH, DISABLED
import sys
import traceback
def showerrorprocess(title,text):
"""Pop up a window with the given title and text. The
text will be selectable (so you can copy it to the
clipboard) but not editable. Returns when the
window is closed."""
root = Tk()
root.title(title)
text_box = Text(root,width=80,height=15)
text_box.pack(fill=BOTH)
text_box.insert(END,text)
text_box.config(state=DISABLED)
def quit():
root.destroy()
root.quit()
root.protocol("WM_DELETE_WINDOW", quit)
root.mainloop()
def showerror(title,text):
"""Pop up a window with the given title and text. The
text will be selectable (so you can copy it to the
clipboard) but not editable. Runs asynchronously in
a new child process."""
process = Process(target=showerrorprocess,args=(title,text))
process.start()
编辑
问题似乎TKinter
是由父进程导入,并“继承”到子进程中,但不知何故,它的状态与父进程密不可分,无法在子进程中工作。只要您确保TKinter
在生成子进程之前不导入,它就会起作用,因为这是第一次导入它的子进程。