Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /proc/thread-self/root/home/ift/52_procpy/dataninja/workbench/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : //proc/thread-self/root/home/ift/52_procpy/dataninja/workbench/pytq5_curve.py

from PyQt4 import QtGui

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas

from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar

from matplotlib.figure import Figure

import numpy as np

from array import array

import time

import random

import threading

from datetime import datetime

from matplotlib.dates import date2num, MinuteLocator, SecondLocator, DateFormatter
import sys

X_MINUTES = 1

Y_MAX = 100

Y_MIN = 1

INTERVAL = 1

MAXCOUNTER = int(X_MINUTES * 60 / INTERVAL)


class MplCanvas(FigureCanvas):

    def __init__(self):

        self.fig = Figure()

        self.ax = self.fig.add_subplot(111)

        FigureCanvas.__init__(self, self.fig)

        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)

        FigureCanvas.updateGeometry(self)

        self.ax.set_xlabel("time of data generator")

        self.ax.set_ylabel('random data value')

        self.ax.legend()

        self.ax.set_ylim(Y_MIN, Y_MAX)

        self.ax.xaxis.set_major_locator(MinuteLocator())  # every minute is a major locator

        self.ax.xaxis.set_minor_locator(SecondLocator([10, 20, 30, 40, 50]))  # every 10 second is a minor locator

        self.ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))  # tick label formatter

        self.curveObj = None  # draw object

    def plot(self, datax, datay):

        if self.curveObj is None:

            # create draw object once

            self.curveObj, = self.ax.plot_date(np.array(datax), np.array(datay), 'bo-')

        else:

            # update data of draw object

            self.curveObj.set_data(np.array(datax), np.array(datay))

            # update limit of X axis,to make sure it can move

            self.ax.set_xlim(datax[0], datax[-1])

        ticklabels = self.ax.xaxis.get_ticklabels()

        for tick in ticklabels:
            tick.set_rotation(25)

        self.draw()


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.vbl.addWidget(self.ntb)

        self.vbl.addWidget(self.canvas)

        self.setLayout(self.vbl)

        self.dataX = []

        self.dataY = []

        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 generateData(self):

        counter = 0

        while (True):

            if self.__exit:
                break

            if self.__generating:

                newData = random.randint(Y_MIN, Y_MAX)

                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)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MplCanvasWrapper()
    sys.exit(app.exec_())

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net