gpt4 book ai didi

python - 如何在 Python 中对 Matplotlib 进行线程化?

转载 作者:太空狗 更新时间:2023-10-30 00:19:57 26 4
gpt4 key购买 nike

当我线程 matplotlib 并且我不经常关闭图形窗口(通过鼠标 - 关闭窗口按钮)时,我收到以下错误:

Exception RuntimeError: RuntimeError('main thread is not in main loop',) in <bound method PhotoImage.__del__ of <Tkinter.PhotoImage instance at 0x7ff408080998>> ignored Exception RuntimeError: RuntimeError('main thread is not in main loop',) in <bound method PhotoImage.__del__ of <Tkinter.PhotoImage instance at 0x7ff3fbe373f8>> ignored
Tcl_AsyncDelete: async handler deleted by the wrong thread
Aborted

我做什么:我有一个主循环调用一个实例的方法。 matplotlib 方法由该实例的 init 函数线程化。我不能调用 matplotlib 作为实例内部的方法,我不知道为什么,所以我通过 __init__ 线程化它:

def __init__(self):
....
thread = threading.Thread(target=self.drawcharts, args=())
thread.daemon = False
thread.start()

线程方法:

def drawcharts(self):

global endthread

..do some math..

try:

plt.plot(k)
plt.plot(x1)
plt.plot(x2)
plt.plot(x3)
#plt.plot(v)
plt.ylabel('some numbers')

plt.show(block=True)
self.drawcharts();
except:
self.drawcharts()


if endthread==1:
return


return

全局变量endthread是我程序的退出函数触发的(键盘异常)。

我真的需要 matplotlib 独立于程序的其余部分运行,因为它是一个 curses 程序,我无法更改结构,以便 matplotlib 可以在非阻塞模式或其他。我还需要阻塞模式,因为需要绘图窗口的小部件。

我想一遍又一遍地遍历同一个 matplotlib 窗口 - 有时不关闭绘图窗口 - 会使 matplotlib 中的内容溢出。有一段时间它像魅力一样工作,但随后不优雅地退出。

我该怎么办?感谢您的帮助!

最佳答案

您应该查看有关使 matplotlib.show() 成为非阻塞的问题和答案。

例如,这个:Plotting in a non-blocking way with Matplotlib

这个答案可以用更简单的方式做你想做的事吗? https://stackoverflow.com/a/42674363/3898873

关于python - 如何在 Python 中对 Matplotlib 进行线程化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30816275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com