擅长:python、mysql、java
<p>从<code>matplotlib</code>源代码发布基于线程的解决方案:</p>
<p>
<a href="https://github.com/richardsheridan/matplotlib/blob/699c3c0af3e1a8d35d7e7b398bb739953257268e/lib/matplotlib/backends/_backend_tk.py#L892-L921" rel="nofollow noreferrer">lib/matplotlib/backends/_backend_tk.py</a></p>
<pre><code>def is_tk_mainloop_running():
import threading
dispatching = sentinel = object()
def target():
nonlocal dispatching
try:
tk._default_root.call('while', '0', '{}')
except RuntimeError as e:
if str(e) == "main thread is not in main loop":
print('not dispatching')
dispatching = False
else:
raise
except BaseException as e:
print(e)
raise
else:
dispatching = True
print('dispatching')
t = threading.Thread(target=target, daemon=True)
t.start()
tk._default_root.update()
t.join()
if dispatching is sentinel:
raise RuntimeError('thread failed to determine dispatching value')
return dispatching
</code></pre>