Python 3.x 多处理 tkinter mainloop

Python 3.x multiprocessing tkinter mainloop

如何在 root.mainloop 上使用 multiprocessing?我正在使用 Python 3.6。我需要在它之后做几行代码,有些需要对象。
不想创建第二个对象 ,就像我的问题的其他一些答案所暗示的那样。 这是一个小代码片段(设置为 JSON 对象):

from multiprocessing import Process
def check():
    try: sett['setup']
    except KeyError:
        sett['troubleshoot_file']=None
        check()
    else:
        if sett['setup'] is True: return
        elif type(sett['setup']) is not bool: raise TypeError('sett[\'setup\'] is not a type of boolian (\'bool\')')
    root.=Tk()
    root['bg']='blue'
    mainloop=Process(target=root.mainloop)
    mainloop.start()
    mainloop.join()
check()

但是,我得到了这个回溯:

Traceback (most recent call last):
  File "(directory)/main.py", line 41, in <module>
    check()
  File "(directory)/main.py", line 39, in check
    mainloop.start()
  File "C:\Program Files (x86)\Python36-32\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "C:\Program Files (x86)\Python36-32\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Program Files (x86)\Python36-32\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "C:\Program Files (x86)\Python36-32\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
    reduction.dump(process_obj, to_child)
  File "C:\Program Files (x86)\Python36-32\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle _tkinter.tkapp objects

我试过了运行:

from queue import Queue
from tkinter import Tk
from multiprocessing import Process
p=Process(target=q.get())

然后解释器彻底崩溃。

您不能跨多个进程或线程使用任何 tkinter 对象。如果您需要在 gui 和其他进程之间共享数据,您将需要设置一个队列,并从 GUI 中轮询队列。

原因是 tkinter 是 tcl 解释器的包装器,它对 python 线程或进程一无所知。

您将在 link 找到有关如何执行此操作的信息: docs.python.org/3.6/library/queue.html