Python 2.7 Python-Matplotlib响应窗口,无阻塞
我有一个实时收集数据的主线程。当它接收到一些数据时,它会将数据添加到堆栈中。然后,堆栈由另一个线程处理,该线程将数据写入磁盘 现在我还希望这个线程绘制一些数据(每分钟左右)。我真的很喜欢Matplotlibs 3D散点图(你可以用鼠标等旋转和缩放)。问题是,要么窗口被阻塞,因此我的程序无法继续,要么,如果我将其设置为非阻塞,则窗口控件没有响应(没有鼠标旋转等)。有什么办法我可以两者兼得吗?我尝试在另一个线程中执行Matplotlib,但它抱怨它需要在主线程中(使用默认的QT4和TkAgg后端进行了尝试) 文件:plotter.pyPython 2.7 Python-Matplotlib响应窗口,无阻塞,python-2.7,matplotlib,Python 2.7,Matplotlib,我有一个实时收集数据的主线程。当它接收到一些数据时,它会将数据添加到堆栈中。然后,堆栈由另一个线程处理,该线程将数据写入磁盘 现在我还希望这个线程绘制一些数据(每分钟左右)。我真的很喜欢Matplotlibs 3D散点图(你可以用鼠标等旋转和缩放)。问题是,要么窗口被阻塞,因此我的程序无法继续,要么,如果我将其设置为非阻塞,则窗口控件没有响应(没有鼠标旋转等)。有什么办法我可以两者兼得吗?我尝试在另一个线程中执行Matplotlib,但它抱怨它需要在主线程中(使用默认的QT4和TkAgg后端进行
import numpy as np
from pylab import *
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import threading
class plotter:
def showThread(self):
plt.show()
def __init__(self):
print "plotter initializing"
# plt.ion()
fig = plt.figure()
ax1 = Axes3D(fig)
self.ax1 = ax1
ax1.scatter([0],[0],[0])
ax1.set_xlim3d(0,512,30)
ax1.set_ylim3d(0,256,30)
ax1.set_zlim3d(0,20,5)
plt.draw()
t = threading.Thread(target=self.showThread)
t.start()
def plot(self,xlist,ylist,zlist):
#This function updates the plot..
self.ax1.scatter(xlist,ylist,zlist)
self.ax1.set_xlim3d(0,512,30)
self.ax1.set_ylim3d(0,256,30)
self.ax1.set_zlim3d(0,20,5)
plt.draw()
错误TkInter:
TclError: out of stack space (infinite loop?)
错误QT4(提供更多错误):
不要将嵌入与
pyplot混用
请参见和
File "/usr/lib64/python2.6/site-packages/matplotlib/backends/backend_qt4.py", line 73, in mainloop
signal.signal(signal.SIGINT, signal.SIG_DFL)
ValueError: signal only works in main thread