Discussion:
[pyqtgraph] pyqtgraph realtime plot broke when re-start the realtime plot
Jan Sebastian
2018-09-08 04:04:20 UTC
Permalink
so, in this program I can start the Qthread realtime plot by change the
slicer value and the QThread realtime plot stop ploting when I set slider
value into zero.
But sometimes when I try to restart the realtime ploting again the plot
seems looklike broken for a short time like in this picture.

[image: IMG_20180907_152226.jpg] <about:invalid#zClosurez>

In this picture there's a single line strike slash below the actual line
graph

and this is my code:

ui.py
from pyqtgraph.Qt import QtCore, QtGui
from PyQt4 import QtCore,QtGui,uic
import sys
import time
from collections import deque
from DynamicThread import DynamicThread
from ThreadRun import ThreadRun

from GUI_ui import Ui_home

class ui(QtGui.QTabWidget):
akselerasi = 0
curve = None
dataGraph = deque(maxlen=20)
x1 = []
y1 = []
aa = False

def __init__(self,parent = None):
super(ui,self).__init__(parent = parent)

self.UiMeja = Ui_home()
self.UiMeja.setupUi(self)

self.UiMeja.akselerasi.setMinimum(0)
self.UiMeja.akselerasi.setMaximum(50)
self.UiMeja.akselerasi.setValue(0)
self.UiMeja.akselerasi.valueChanged.connect(self.valueAkselerasi)
self.UiMeja.akselerasi.sliderReleased.connect(self.getThread)

self.threadDinamis = DynamicThread()
self.threadDinamis.dataThread.connect(self.runningDynamic)
ui.curve = self.UiMejaGetar.graph1.plot(pen=(255,0,0))
self.UiMeja.graph1.setRange(xRange=None, yRange=[-1, 1 ])
self.UiMeja.graph1.showGrid(x=True, y=True)
self.UiMeja.graph1.setMouseEnabled(x=False, y=False)

self.UiMejaGetar.l1.setText(str(self.UiMejaGetar.akselerasi.value()))

def getThread(self):

if self.sender() == self.UiMeja.akselerasi:
ui.akselerasii = int(self.UiMeja.akselerasi.value())

if GUI_MejaGetar.akselerasii > 0:
if ui.aa == True:
print("second")
minRange = int(self.UiMeja.akselerasi.value()) * -1
self.UiMeja.graph1.setRange(xRange=None, yRange=[minRange,
int(self.UiMeja.akselerasi.value()) ])
self.threadDinamis.trigrer(ui.akselerasii)

else:
minRange = int(self.UiMeja.akselerasi.value()) * -1
self.UiMeja.graph1.setRange(xRange=None, yRange=[minRange,
int(self.UiMeja.akselerasi.value()) ])
GUI_MejaGetar.aa = True

print("first")
self.threadDinamis.trigrer(GUI_MejaGetar.akselerasii)
self.threadDinamis.start()
else:
self.threadDinamis.stop()
GUI_MejaGetar.aa = False
GUI_MejaGetar.dataGraph.clear()
GUI_MejaGetar.x1 = []
GUI_MejaGetar.y1 = []

def runningDynamic(self,generateData):
#print(generateData['x'])
GUI_MejaGetar.dataGraph.append({'x': generateData['x'], 'y':
generateData['y']})
GUI_MejaGetar.x1 = [item['x'] for item in GUI_MejaGetar.dataGraph]
GUI_MejaGetar.y1 = [item['y'] for item in GUI_MejaGetar.dataGraph]
GUI_MejaGetar.curve.setData(x=GUI_MejaGetar.x1, y=GUI_MejaGetar.y1)


if __name__ == '__main__':

app = QtGui.QApplication([])
widget = GUI_MejaGetar()

widget.show()
app.exec_()



and this is my threading code:

import time
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QTime, QTimer
from randomMethod import randomMethod

class DynamicThread(QtCore.QThread):
dataThread = QtCore.pyqtSignal(object)
dynamicGenerator = randomMethod()
status = False
intAkselerasi = 0
def __init__(self, parent=None):
QtCore.QThread.__init__(self,parent)
#self.gui_text = None

def trigrer(self,num):
DynamicThread.intAkselerasi = num

def do_work(self):
i = 0
listData = []
count = 0
test = 0
#t = QTime()
#t.start()
print("starting.....")

while DynamicThread.status == True:
if DynamicThread.intAkselerasi > 0:
if not listData:
value = int(DynamicThread.dynamicGenerator.bits(), 2)
dat = value % DynamicThread.intAkselerasi
listData.append(dat)
count = dat
else:
value = int(DynamicThread.dynamicGenerator.bits(), 2)
dat = value % DynamicThread.intAkselerasi

if listData[i - 1] < 0:
dat = dat * -1
test = 0
test = count + dat
lowLimit = DynamicThread.intAkselerasi * -1
if DynamicThread.intAkselerasi > test > lowLimit:
count = count + dat
listData.append(count)
else:
if dat < lowLimit:
temp = abs(dat)
count = count + temp
listData.append(temp)
else:
temp = dat * -1
count = count + temp
listData.append(temp)
print(listData[i])
print("test: ",test)
print("count: ",count)
self.dataThread.emit({'x': i,'y':count})
i = i + 1
time.sleep(0.5)
else:
DynamicThread.status = False
print("stop")
break
print("stoping the process....")

def run(self):
self.do_work()

def start(self):
DynamicThread.status = True
super(DynamicThread, self).start()

def stop(self):
DynamicThread.status = False


so, whats the problem of my code? Any idea how to fix it? Thank you
(nb: I run this code on raspberry pi 3)
--
You received this message because you are subscribed to the Google Groups "pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyqtgraph+***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/dd495f89-6daa-4ea0-8bc4-e86d88d5a569%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Jan Sebastian
2018-09-08 05:44:13 UTC
Permalink
so, in this program I can start the Qthread realtime plot by change the
slicer value and the QThread realtime plot stop ploting when I set slider
value into zero. But sometimes when I try to restart the realtime ploting
again the plot seems looklike broken for a short time like in this picture.

[image: IMG_20180907_152226.jpg]


In this picture there's a single line strike slash below the actual line
graph

and this is my code:

ui.py

from pyqtgraph.Qt import QtCore, QtGuifrom PyQt4 import QtCore,QtGui,uicimport sysimport timefrom collections import dequefrom DynamicThread import DynamicThreadfrom ThreadRun import ThreadRun
from GUI_ui import Ui_home
class ui(QtGui.QTabWidget):
akselerasi = 0
curve = None
dataGraph = deque(maxlen=20)
x1 = []
y1 = []
aa = False

def __init__(self,parent = None):
super(ui,self).__init__(parent = parent)

self.UiMeja = Ui_home()
self.UiMeja.setupUi(self)

self.UiMeja.akselerasi.setMinimum(0)
self.UiMeja.akselerasi.setMaximum(50)
self.UiMeja.akselerasi.setValue(0)
self.UiMeja.akselerasi.valueChanged.connect(self.valueAkselerasi)
self.UiMeja.akselerasi.sliderReleased.connect(self.getThread)

self.threadDinamis = DynamicThread()
self.threadDinamis.dataThread.connect(self.runningDynamic)
ui.curve = self.UiMejaGetar.graph1.plot(pen=(255,0,0))
self.UiMeja.graph1.setRange(xRange=None, yRange=[-1, 1 ])
self.UiMeja.graph1.showGrid(x=True, y=True)
self.UiMeja.graph1.setMouseEnabled(x=False, y=False)
self.UiMejaGetar.l1.setText(str(self.UiMejaGetar.akselerasi.value()))

def getThread(self):

if self.sender() == self.UiMeja.akselerasi:
ui.akselerasii = int(self.UiMeja.akselerasi.value())

if GUI_MejaGetar.akselerasii > 0:
if ui.aa == True:
print("second")
minRange = int(self.UiMeja.akselerasi.value()) * -1
self.UiMeja.graph1.setRange(xRange=None, yRange=[minRange, int(self.UiMeja.akselerasi.value()) ])
self.threadDinamis.trigrer(ui.akselerasii)

else:
minRange = int(self.UiMeja.akselerasi.value()) * -1
self.UiMeja.graph1.setRange(xRange=None, yRange=[minRange, int(self.UiMeja.akselerasi.value()) ])
GUI_MejaGetar.aa = True

print("first")
self.threadDinamis.trigrer(GUI_MejaGetar.akselerasii)
self.threadDinamis.start()
else:
self.threadDinamis.stop()
GUI_MejaGetar.aa = False
GUI_MejaGetar.dataGraph.clear()
GUI_MejaGetar.x1 = []
GUI_MejaGetar.y1 = []

def runningDynamic(self,generateData):
#print(generateData['x'])
GUI_MejaGetar.dataGraph.append({'x': generateData['x'], 'y': generateData['y']})
GUI_MejaGetar.x1 = [item['x'] for item in GUI_MejaGetar.dataGraph]
GUI_MejaGetar.y1 = [item['y'] for item in GUI_MejaGetar.dataGraph]
GUI_MejaGetar.curve.setData(x=GUI_MejaGetar.x1, y=GUI_MejaGetar.y1)

if __name__ == '__main__':

app = QtGui.QApplication([])
widget = GUI_MejaGetar()

widget.show()
app.exec_()


and this is my threading code:

DynamicThread.py
import time
import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import QTime, QTimer
from randomMethod import randomMethod

class DynamicThread(QtCore.QThread):
dataThread = QtCore.pyqtSignal(object)
dynamicGenerator = randomMethod()
status = False
intAkselerasi = 0
def __init__(self, parent=None):
QtCore.QThread.__init__(self,parent)
#self.gui_text = None

def trigrer(self,num):
DynamicThread.intAkselerasi = num

def do_work(self):
i = 0
listData = []
count = 0
test = 0
#t = QTime()
#t.start()
print("starting.....")

while DynamicThread.status == True:
if DynamicThread.intAkselerasi > 0:
if not listData:
value = int(DynamicThread.dynamicGenerator.bits(), 2)
dat = value % DynamicThread.intAkselerasi
listData.append(dat)
count = dat
else:
value = int(DynamicThread.dynamicGenerator.bits(), 2)
dat = value % DynamicThread.intAkselerasi

if listData[i - 1] < 0:
dat = dat * -1
test = 0
test = count + dat
lowLimit = DynamicThread.intAkselerasi * -1
if DynamicThread.intAkselerasi > test > lowLimit:
count = count + dat
listData.append(count)
else:
if dat < lowLimit:
temp = abs(dat)
count = count + temp
listData.append(temp)
else:
temp = dat * -1
count = count + temp
listData.append(temp)
print(listData[i])
print("test: ",test)
print("count: ",count)
self.dataThread.emit({'x': i,'y':count})
i = i + 1
time.sleep(0.1)
else:
DynamicThread.status = False
print("stop")
break
print("stoping the process....")

def run(self):
self.do_work()

def start(self):
DynamicThread.status = True
super(DynamicThread, self).start()

def stop(self):
DynamicThread.status = False



so, whats the problem of my code? Any idea how to fix it? Thank you
(nb: I run this code on raspberry pi 3)
--
You received this message because you are subscribed to the Google Groups "pyqtgraph" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyqtgraph+***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/pyqtgraph/54d63e2f-0677-405b-ae15-12fc8420c407%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Loading...