My first thought is that the example is attempting to perform GUI
operations from a thread. Qt does not support this behavior, so that
probably explains the freezing. If you search a little, there are many
articles and examples that discuss how to properly use threads with Qt.

On Tue, May 15, 2018, 08:55 Jan Sebastian <[email protected]> wrote:

> I write an application that displays random number in real time graph, it
> run perfectly on windows but when I try it on raspberry pi it alwarys stop
> updating the graph, but the proses in the python shell is still running
> generate a rundom number and the program didn't.
>
> Any idea, how to fix it?
>
> the example of my code:
>
>
> from PyQt4 import QtCore,QtGui,uic
> from PyQt4.QtCore import QTime, QTimer
> import sys
> import time
> import threading
> from pyqtgraph import ViewBox, PlotWidget
> #import pyqtgraph as pg
> from pyqtgraph.Qt import QtCore, QtGui
> import numpy as np
> from blupblupshub import BlumBlumShub
> from TimeAxisItem import TimeAxisItem
> from collections import deque
> import random
>
>
> qtCreatorFile = "mejaGetar2.ui"
>
>
> Ui_MainWindow,QtBaseClass = uic.loadUiType(qtCreatorFile)
>
> class MyApp(QtGui.QTabWidget,Ui_MainWindow):
>     akselerasi = 0
>     threads = []
>     threads2 = []
>     varGraph1 = object
>     aa = False
>     def __init__(self):
>
>         QtGui.QTabWidget.__init__(self)
>         Ui_MainWindow.__init__(self)
>         self.setupUi(self)
>         self.akselerasi.setMinimum(0)
>         self.akselerasi.setMaximum(30)
>         self.akselerasi.setValue(0)
>
>         self.akselerasi.sliderReleased.connect(self.getThread)
>         self.graph1.setRange(xRange=None, yRange=[-1, 1 ])
>         self.graph1.setLabel('bottom', 'time', 's')
>         self.graph1.showGrid(x=True, y=True)
>         #self.graph1.setLab('bottom',TimeAxisItem(orientation='bottom'))
>         self.graph1.setMouseEnabled(x=False, y=False)
>         MyApp.varGraph1 = self.graph1
>
>         self.l1.setText(str(self.akselerasi.value()))
>         #self.currentChanged.connect(self.forceCloseThread)
>
>
>     def getThread(self):
>
>         if self.sender() == self.akselerasi:
>             MyApp.akselerasii = int(self.akselerasi.value())
>
>         if MyApp.akselerasii > 0:
>
>             thread1 = DynamicThread("akselerasi")
>
>             if MyApp.aa == True:
>                 print("second")
>                 minRange = int(self.akselerasi.value()) * -1
>                 self.graph1.setRange(xRange=None, yRange=[minRange,
> int(self.akselerasi.value()) ])
>                 thread1.trigrer(MyApp.akselerasii)
>
>             else:
>                 thread1.trigrer(MyApp.akselerasii)
>                 MyApp.threads2.append(thread1)
>                 minRange = int(self.akselerasi.value()) * -1
>                 self.graph1.setRange(xRange=None, yRange=[minRange,
> int(self.akselerasi.value()) ])
>                 MyApp.aa = True
>
>                 print("first")
>                 thread1.start()
>         else:
>             for t in MyApp.threads2:
>                 MyApp.aa = False
>                 t.stop()
>                 self.graph1.clear()
>
>
> class DynamicThread(threading.Thread,MyApp):
>     intAkselerasi = 0
>     ruuun = False
>
>     def __init__(self,sub):
>         threading.Thread.__init__(self)
>
>         self.subject = sub
>
>     def trigrer(self,num):
>         DynamicThread.intAkselerasi = num
>
>     def run(self):
>         listData = []
>         a = 0
>         count = 0
>         test = 0
>         t = QTime()
>         t.start()
>         dataGraph = deque(maxlen=20)
>         x1 = []
>         y1 = []
>
>         print("starting " + self.subject)
>         dynamicGenerator = BlumBlumShub()
>         curve = MyApp.varGraph1.plot(pen=(255,0,0))
>         while DynamicThread.ruuun == True:
>             if DynamicThread.intAkselerasi > 0:
>                 minus = DynamicThread.intAkselerasi *-1
>                 data = random.randint(minus,DynamicThread.intAkselerasi)
>
>                 dataGraph.append({'x': t.elapsed(), 'y': data})
>                 x1 = [item['x'] for item in dataGraph]
>                 y1 = [item['y'] for item in dataGraph]
>                 curve.setData(x=x1, y=y1)
>                 print("test: ",data)
>                 print("\n")
>                 a = a + 1
>
>                 time.sleep(0.5)
>
>             else:
>                 DynamicThread.ruuun = False
>                 print("stop")
>                 break
>         print("stoping " + self.subject)
>         dataGraph = []
>         x1 = []
>         y1 = []
>
>     def start(self):
>         DynamicThread.ruuun = True
>         super(DynamicThread,self).start()
>
>     def stop(self):
>         DynamicThread.ruuun = False
>
> if __name__ == "__main__":
>     app = QtGui.QApplication(sys.argv)
>     window = MyApp()
>     window.show()
>     sys.exit(app.exec_())
>
>
>
> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/pyqtgraph/292d1a51-6aae-4d2c-b7c9-6228dccf178b%40googlegroups.com
> <https://groups.google.com/d/msgid/pyqtgraph/292d1a51-6aae-4d2c-b7c9-6228dccf178b%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyqtgraph/CACZXET9NipqL3Wv4YrC53dfA11YLv3pfqNcvOQjfz%2BMZD6eU7g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to