Example #1
0
class MPL_Widget(QWidget):
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        self.canvas = MyMplCanvas()
        self.toolbar = NavigationToolbar(self.canvas, self.canvas)    #no toolbar
        self.vbox = QVBoxLayout()
        self.vbox.addWidget(self.canvas)
        self.vbox.addWidget(self.toolbar)
        self.toolbar.hide()
        self.setLayout(self.vbox)
Example #2
0
class BISPlot(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.canvas = SetPlot()
        self.vbl = QtGui.QVBoxLayout()
        self.ntb = NavigationToolbar(self.canvas, parent)
        self.ntb.hide()
        self.vbl.addWidget(self.ntb)
        self.vbl.addWidget(self.canvas)
        self.setLayout(self.vbl)

        self.flag_Zero = True
        self.flag_onlinedata = False
        self.flag_online = False
        self.flag_offline = False

        self.dataX_online = []
        self.dataY_online = []
        self.dataX_offline = []
        self.dataY_offline = []
        self.offlinedata = []
        self.onlinedata = []
        self.count_online = 0
        self.count_offline = 0
        self.count_onlinedata = 0
        self.initDataGenerator()

    def startPlot(self):
        self.__generating = True

    def pausePlot(self):
        self.__generating = False

    def initDataGenerator(self):
        self.__generating = False
        self.__exit = False
        self.t2 = threading.Thread(target=self.plot_thread)
        self.t2.start()

    def releasePlot(self):
        self.__exit = True
        self.t2.join()

########################实时plot#####################################################

    def onlinePlot(self):
        if self.onlinedata == []:
            self.DataY_online = 0
            self.count_online += 1
            self.DataX_online = self.count_online + self.k
        else:
            if self.flag_onlinedata:
                if self.count_onlinedata <= (len(self.onlinedata) - 1):
                    self.DataY_online = self.onlinedata[self.count_onlinedata]
                    self.count_online += 1
                    self.count_onlinedata += 1
                    self.DataX_online = self.count_online + self.k
                else:
                    self.flag_onlinedata = False
                    self.count_onlinedata = self.count_onlinedata - 1
            else:
                self.DataY_online = 0
                self.count_online += 1
                self.DataX_online = self.count_online + self.k
        self.dataX_online.pop(0)
        self.dataY_online.pop(0)
        self.dataX_online.append(self.DataX_online)
        self.dataY_online.append(self.DataY_online)
        time.sleep(INTERVAL_online)
        if self.__generating:
            self.canvas.plot(self.dataX_online, self.dataY_online)
        else:
            pass

########################离线plot#####################################################

    def offlinePlot(self):
        if self.__generating:
            if self.count_offline <= len(self.offlinedata):
                self.DataY_offline = self.offlinedata[self.count_offline]
                self.count_offline += 1
                self.DataX_offline = self.count_offline + self.k
            else:
                self.count_offline = 0
            self.dataX_offline.pop(0)
            self.dataY_offline.pop(0)
            self.dataX_offline.append(self.DataX_offline)
            self.dataY_offline.append(self.DataY_offline)
            time.sleep(INTERVAL_offline)
            self.canvas.plot(self.dataX_offline, self.dataY_offline)
        else:
            pass

########################plot线程#####################################################

    def plot_thread(self):
        print('Plot线程运行中 %s' % (ctime()))
        while True:
            if self.__exit:
                break
            self.canvas.ax.set_ylim(-3000, 3000)
            if self.flag_Zero:
                for self.k in range(0, MAXCOUNTER):
                    self.dataY_online.append(0)
                    self.dataX_online.append(self.k)
                    self.dataY_offline.append(0)
                    self.dataX_offline.append(self.k)
                self.flag_Zero = False
            else:
                pass
            if self.flag_online:
                self.onlinePlot()
            if self.flag_offline:
                self.offlinePlot()
            else:
                pass
Example #3
0
class MPL_Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = MyMplCanvas()
        #self.toolbar = MyNavigationToolbar(self.canvas, self.canvas, direction = 'v')
        self.toolbar = NavigationToolbar(self.canvas, self.canvas)
        self.toolbar.hide()
        self.hbox = QtGui.QHBoxLayout()
        #self.hbox.addWidget(self.toolbar)
        self.hbox.addWidget(self.canvas)
        self.setLayout(self.hbox)
        ##########################
        self.hZoom = QtGui.QAction("Zoom", self)
        self.hZoom.setShortcut("Ctrl+Z")
        self.addAction(self.hZoom)
        QtCore.QObject.connect(self.hZoom, QtCore.SIGNAL("triggered()"),
                               self.ZoomToggle)

        self.actionAutoScale = QtGui.QAction("AutoScale",
                                             self)  #self.MainWindow)
        self.actionAutoScale.setShortcut("Ctrl+A")
        self.addAction(self.actionAutoScale)
        QtCore.QObject.connect(self.actionAutoScale,
                               QtCore.SIGNAL("triggered()"),
                               self.autoscale_plot)

        self.installEventFilter(EventFilter(self))

        ###########SAVING FIGURE TO CLIPBOARD##########
        self.cb = None  #will be used for the clipboard
        self.tempPath = getHomeDir()
        self.tempPath = os.path.join(self.tempPath, 'tempMPL.png')

    def ZoomToggle(self):
        self.toolbar.zoom()

    def autoscale_plot(self):
        self.toolbar.home()

    def mpl2Clip(self):
        try:
            self.canvas.fig.savefig(self.tempPath)
            tempImg = QtGui.QImage(self.tempPath)
            self.cb = QtGui.QApplication.clipboard()
            self.cb.setImage(tempImg)
        except:
            print 'Error copying figure to clipboard'
            errorMsg = "Sorry: %s\n\n:%s\n" % (sys.exc_type, sys.exc_value)
            print errorMsg

    def focusEvent(self, event):
        #        self.enableAutoScale()
        #        self.enableZoom()
        self.enableClip()
#        self.enableCSV()
#print "Focus In %s"%self.canvas.plotTitle

    def lossFocusEvent(self, event):
        #        self.disableAutoScale()
        #        self.disableZoom()
        self.disableClip()


#        self.disableCSV()
#print "Focus Out %s"%self.canvas.plotTitle

    def enableClip(self):
        self.mpl2ClipAction = QtGui.QAction("Save to Clipboard", self)
        self.mpl2ClipAction.setShortcut("Ctrl+C")
        self.addAction(self.mpl2ClipAction)
        QtCore.QObject.connect(self.mpl2ClipAction,
                               QtCore.SIGNAL("triggered()"), self.mpl2Clip)

    def disableClip(self):
        QtCore.QObject.disconnect(self.mpl2ClipAction,
                                  QtCore.SIGNAL("triggered()"), self.mpl2Clip)
        self.removeAction(self.mpl2ClipAction)
Example #4
0
class MPL_Widget(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = MyMplCanvas()
        #self.toolbar = MyNavigationToolbar(self.canvas, self.canvas, direction = 'v')
        self.toolbar = NavigationToolbar(self.canvas, self.canvas)
        self.toolbar.hide()
        self.hbox = QtGui.QHBoxLayout()
        #self.hbox.addWidget(self.toolbar)
        self.hbox.addWidget(self.canvas)
        self.setLayout(self.hbox)
        ##########################
        self.hZoom = QtGui.QAction("Zoom",  self)
        self.hZoom.setShortcut("Ctrl+Z")
        self.addAction(self.hZoom)
        QtCore.QObject.connect(self.hZoom,QtCore.SIGNAL("triggered()"), self.ZoomToggle)

        self.actionAutoScale = QtGui.QAction("AutoScale",  self)#self.MainWindow)
        self.actionAutoScale.setShortcut("Ctrl+A")
        self.addAction(self.actionAutoScale)
        QtCore.QObject.connect(self.actionAutoScale,QtCore.SIGNAL("triggered()"), self.autoscale_plot)


        self.installEventFilter(EventFilter(self))

        ###########SAVING FIGURE TO CLIPBOARD##########
        self.cb = None #will be used for the clipboard
        self.tempPath = getHomeDir()
        self.tempPath = os.path.join(self.tempPath,'tempMPL.png')

    def ZoomToggle(self):
        self.toolbar.zoom()

    def autoscale_plot(self):
        self.toolbar.home()

    def mpl2Clip(self):
        try:
            self.canvas.fig.savefig(self.tempPath)
            tempImg = QtGui.QImage(self.tempPath)
            self.cb = QtGui.QApplication.clipboard()
            self.cb.setImage(tempImg)
        except:
            print 'Error copying figure to clipboard'
            errorMsg = "Sorry: %s\n\n:%s\n"%(sys.exc_type, sys.exc_value)
            print errorMsg

    def focusEvent(self, event):
#        self.enableAutoScale()
#        self.enableZoom()
        self.enableClip()
#        self.enableCSV()
        #print "Focus In %s"%self.canvas.plotTitle

    def lossFocusEvent(self, event):
#        self.disableAutoScale()
#        self.disableZoom()
        self.disableClip()
#        self.disableCSV()
        #print "Focus Out %s"%self.canvas.plotTitle

    def enableClip(self):
        self.mpl2ClipAction = QtGui.QAction("Save to Clipboard",  self)
        self.mpl2ClipAction.setShortcut("Ctrl+C")
        self.addAction(self.mpl2ClipAction)
        QtCore.QObject.connect(self.mpl2ClipAction,QtCore.SIGNAL("triggered()"), self.mpl2Clip)

    def disableClip(self):
        QtCore.QObject.disconnect(self.mpl2ClipAction,QtCore.SIGNAL("triggered()"), self.mpl2Clip)
        self.removeAction(self.mpl2ClipAction)
Example #5
0
class MplCanvasWrapper(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.canvas = MplCanvas()
        self.vbl = QtGui.QVBoxLayout()
        self.ntb = NavigationToolbar(self.canvas, parent)
        self.ntb.hide()
        self.vbl.addWidget(self.ntb)
        self.vbl.addWidget(self.canvas)
        self.setLayout(self.vbl)
        self.dataX = []
        self.dataY = []
        self.data1 = []
        self.data2 = []
        self.count = 0
        self.flag_newdata = False
        self.initDataGenerator()

    def startPlot(self):
        self.__generating = True

    def pausePlot(self):
        self.__generating = False
        pass

    def initDataGenerator(self):
        self.__generating = False
        self.__exit = False
        self.tData = threading.Thread(name="dataGenerator",
                                      target=self.generateData)
        self.tData.start()

    def releasePlot(self):
        self.__exit = True
        self.tData.join()

    def openflag_set(self):
        self.flag_newdata = True

    def openflag_clear(self):
        self.flag_newdata = False

    def generateData(self):
        counter = 0
        print('绘图线程运行中 %s' % (ctime()))
        while (True):
            if self.__exit:
                break
            if self.__generating:

                if self.count <= MAXCOUNTER:
                    self.canvas.ax.set_ylim(min(self.data1[0:MAXCOUNTER]),
                                            max(self.data1[0:MAXCOUNTER]))
                else:
                    self.canvas.ax.set_ylim(
                        min(self.data1[(self.count - MAXCOUNTER):self.count]),
                        max(self.data1[(self.count - MAXCOUNTER):self.count]))

                if self.flag_newdata and self.count <= len(self.data1):
                    newData = self.data1[self.count]
                    self.count += 1
                else:
                    self.count = 0
                    self.flag_newdata = False
                newTime = date2num(datetime.now())
                self.dataX.append(newTime)
                self.dataY.append(newData)
                self.canvas.plot(self.dataX, self.dataY)

                if counter >= MAXCOUNTER:
                    self.dataX.pop(0)
                    self.dataY.pop(0)

                else:
                    counter += 1
            time.sleep(INTERVAL)