Python 2.7 Python-Matplotlib响应窗口,无阻塞

Python 2.7 Python-Matplotlib响应窗口,无阻塞,python-2.7,matplotlib,Python 2.7,Matplotlib,我有一个实时收集数据的主线程。当它接收到一些数据时,它会将数据添加到堆栈中。然后,堆栈由另一个线程处理,该线程将数据写入磁盘 现在我还希望这个线程绘制一些数据(每分钟左右)。我真的很喜欢Matplotlibs 3D散点图(你可以用鼠标等旋转和缩放)。问题是,要么窗口被阻塞,因此我的程序无法继续,要么,如果我将其设置为非阻塞,则窗口控件没有响应(没有鼠标旋转等)。有什么办法我可以两者兼得吗?我尝试在另一个线程中执行Matplotlib,但它抱怨它需要在主线程中(使用默认的QT4和TkAgg后端进行

我有一个实时收集数据的主线程。当它接收到一些数据时,它会将数据添加到堆栈中。然后,堆栈由另一个线程处理,该线程将数据写入磁盘

现在我还希望这个线程绘制一些数据(每分钟左右)。我真的很喜欢Matplotlibs 3D散点图(你可以用鼠标等旋转和缩放)。问题是,要么窗口被阻塞,因此我的程序无法继续,要么,如果我将其设置为非阻塞,则窗口控件没有响应(没有鼠标旋转等)。有什么办法我可以两者兼得吗?我尝试在另一个线程中执行Matplotlib,但它抱怨它需要在主线程中(使用默认的QT4和TkAgg后端进行了尝试)

文件:plotter.py

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