python - tkinter - 致命 Python 错误:PyEval_RestoreThread:NULL tstate
问题描述
在我创建的 tkinter gui 中,如果在 tkinter 窗口中打开 matplotlib 绘图时尝试编写文本文件,则 python 会引发以下错误:
Fatal Python error: PyEval_RestoreThread: NULL tstate
Current thread 0x00002f58 (most recent call first):
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\backends\backend_qt5.py", line 164 in mainloop
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\backend_bases.py", line 193 in __call__
File "C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 253 in show
File "C:\Users\rohit\python\connections.py", line 40 in draw_connected_pans
File "tlscript.pyw", line 1325 in draw_all_pans
File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1699 in __call__
File "C:\ProgramData\Anaconda3\lib\tkinter\__init__.py", line 1277 in mainloop
File "tlscript.pyw", line 1455 in <module>
如果我关闭包含绘图的 tkinter 窗口,然后执行用于写入文本文件的 gui 函数,则不会发生错误
用于创建 matplotlib 图的函数
在connections.py中包含第40行的函数,如上面的回溯
def draw_connected_pans(G):
Pos = nx.spring_layout(G)
nx.draw_networkx(G, pos = Pos)
plt.axis('off')
plt.show()
tlscript.py 中包含第 1325 行的函数,如上面的回溯
def draw_all_pans():
try:
application_window = window
connections.draw_connected_pans(graph)
except:
exceptionhandler(traceback.format_exc())
触发错误的代码
connectionmenu2.add_command(label="Save as html plot of connected entities of pan ", command=save_connection_html)
@mydecorator
def save_connection_html():
try:
if graph:
application_window = window
pan = simpledialog.askstring('Prompt', 'Enter PAN', parent = application_window)
connections.use_d3(graph,pan)
except:
exceptionhandler(traceback.format_exc())
def use_d3(H,pan):
tree = return_json(H,pan)
htmlx =htmls.htmlfile.replace('var flare','var flare = '+json.dumps(tree)+';')
with open('connection_chart.html', 'w', encoding ='utf-8') as file:
file.write(htmlx)
解决方案
我通过将参数 block=False 传递给 plt.show() 来解决它
推荐阅读
- grid - Netlogo:是否可以有不同的补丁大小来节省建模计算时间?
- django - ImageField : 如何在 django 中处理图像文件
- wordpress - Slim API URL 在 wordpress 子文件夹中显示 404
- apache-flink - 如何将 flink 任务或背压相关的指标导出到 prometheus?
- sbt - SBT 'dependsOn' 但对于 publishLocal
- python - 具有多个顺序条件的字典过滤
- html - CSS 样式类被忽略
- java - groovyx.net.http.RESTClient 支持 TLSv1.2:
- java - 从存储在父类变量中的子类变量中获取变量
- java - 同包java小程序中的类