Here is my complet code
to call update and get my value i use Qthread and signal
Thx for your time !
#!/usr/bin/python
# -*- coding: utf-8 -*-
#import initExample
import PySide
import os.path
import imp
imp.reload(PySide)
toto = PySide
from pyqtgraph.Qt import QtGui, QtCore, USE_PYSIDE
import serial
from Lib.Processing import Processing
from Lib.Processing import Conf
import numpy as np
import pyqtgraph as pg
from pyqtgraph.ptime import time
from Thread_manager import *
from Lib.Access import Access
from Thread_manager import ComMonitorThread
from datetime import datetime
if USE_PYSIDE:
from ui_TEST_WINDOWS_PYSIDE import Ui_Form
print ("Using Pyside")
else:
print ("Using nothing, let's crash !")
pass
class Graphic_plot():
def __init__(self,value_to_display,value_to_log):
self.initialize_var(value_to_display,value_to_log)
def initialize_var(self,value_to_display,value_to_log):
self.connection = Access()
c_processing_json_file = processing_db_access_conf()
data_json = c_processing_json_file.open_json_file_read()
com_port =data_json["com"]["port_com"]
self.one_conf_path = data_json["conf_ventil"]["out"]
self.data = []
self.data_4 = [[],[],[],[]]
self.data_3 = [[],[],[]]
self.data_2 = [[],[]]
self.data_1 = [[]]
self.curve = []
self.cpt_update = 0
self.can_be_clean = False
self.value_to_log_ = value_to_log
self.value_to_display_ = None
self.value_to_display_ = value_to_display
self.count_value_to_display = 0
self.curve_number = 0
self.max_scope = 0
self.translated_value = []
self.xdata = np.array([])
self.connection_var = self.connection.Connect(com_port,"serial")
self.run_graph()
def enumerate_colors(self,number_of_curves):
"""Limited to 5 curves 1 : Red ,2 : Green, 3 : White"""
my_colors = np.array(['r','g','w','y'])
return my_colors[:number_of_curves]
def run_graph(self):
pw = pg.PlotWidget()
pw.show()
pw.setWindowTitle('Db_Access Graphic')
p = pw.plotItem
p.setLabels(left='axis 1')
self.l = pg.LegendItem((100,60), offset=(70,30))
self.l.setParentItem(p.graphicsItem())
p.showGrid(True,True,251)
p.showButtons()
c_processing_json_file = processing_db_access_conf()
data_json = c_processing_json_file.open_json_file_read()
self.max_scope = data_json["graph_parameters"]["axis_scope_max"]
min_scope = data_json["graph_parameters"]["axis_scope_min"]
p.setRange(rect=None, xRange=[int(min_scope),int(self.max_scope)], yRange=[1300,-300], padding=0.09, update=True, disableAutoRange=True)
self.curve_number = len(self.value_to_display_)/2
self.curve_number = int(self.curve_number)
if self.curve_number == 1:
self.data = self.data_1
elif self.curve_number == 2:
self.data = self.data_2
elif self.curve_number == 3:
self.data = self.data_3
elif self.curve_number == 4:
self.data = self.data_4
colors_to_use = self.enumerate_colors(self.curve_number)
legend_item_to_display = self.get_translated_text()
for i in colors_to_use:
self.curve.append(p.plot(pen= i))
if len(legend_item_to_display) == 1:
self.l.addItem(p.plot(pen = colors_to_use[0]),legend_item_to_display[0])
elif len(legend_item_to_display) == 2:
self.l.addItem(p.plot(pen = colors_to_use[0]),legend_item_to_display[0])
self.l.addItem(p.plot(pen = colors_to_use[1]),legend_item_to_display[1])
elif len(legend_item_to_display) == 3:
self.l.addItem(p.plot(pen = colors_to_use[0]),legend_item_to_display[0])
self.l.addItem(p.plot(pen = colors_to_use[1]),legend_item_to_display[1])
self.l.addItem(p.plot(pen = colors_to_use[2]),legend_item_to_display[2])
elif len(legend_item_to_display) == 4:
self.l.addItem(p.plot(pen = colors_to_use[0]),legend_item_to_display[0])
self.l.addItem(p.plot(pen = colors_to_use[1]),legend_item_to_display[1])
self.l.addItem(p.plot(pen = colors_to_use[2]),legend_item_to_display[2])
self.l.addItem(p.plot(pen = colors_to_use[3]),legend_item_to_display[3])
self.connection_var.ask_streaming_start(self.value_to_display_,self.value_to_log_,False)
def real_nbr(self,nbr):
my_list = []
for item in nbr:
if item > 32767:
my_list.append(item-65536)
else :
my_list.append(item)
return my_list
def grouped(self, iterable, n):
"s -> (s0,s1,s2,...sn-1), (sn,sn+1,sn+2,...s2n-1), (s2n,s2n+1,s2n+2,...s3n-1), ..."
return zip(*[iter(iterable)]*n)
def get_translated_text(self):
text_node = []
text_value = self.grouped(self.value_to_display_,2)
c_process = Processing(self.one_conf_path)
for item in text_value:
self.translated_value.append(c_process.get_text_node(item))
for item in self.translated_value:
text_node.append(item[2:])
return text_node
def append_to_log_file(self,value_to_log):
if self.can_be_clean == False:
self.my_log_file = 'log_file_graph.txt'
text_node = []
text_node = self.get_translated_text()
my_file = open(self.my_log_file,'w')
self.count_value_to_display= len(self.value_to_log_)/2
my_file.write("[Time - H-M-S-MS] "+ str(text_node[:int(self.count_value_to_display)]) + '\n')
self.my_file_2 = open(self.my_log_file,'a')
self.can_be_clean = True
self.my_file_2.write( "[" + str(datetime.now().time()) + " ] : " + str(value_to_log[:int(self.count_value_to_display)]) + '\n')
def update(self,my_values):
value = self.real_nbr(my_values)
if len(self.value_to_log_) > 1:
self.append_to_log_file(value)
for i in range (self.curve_number):
if len(self.data[i]) < int(self.max_scope):
self.data[i].append(value[i])
else:
del self.data[i][0]
self.data[i].append(int(value[i]))
self.xdata = np.array(self.data[i], dtype='int')
self.curve[i].setData(self.xdata)
if __name__ == '__main__':
app = QtGui.QApplication([])
aa = Graphic_plot()