Hi Patrick,

thanks a lot! I will use that.

Wonderful - again!

On Tuesday, 18 September 2018 04:40:19 UTC+2, Patrick wrote:
>
> Hi,
>
> I think there is a bug somewhere, where the first call to setData() 
> doesn't result in the view range being updated. Your code is working fine, 
> the plot is being updated with the correct data, but the axes scales aren't 
> correct on the first call.
>
> Without spending time tracing through why the ranges aren't being updated, 
> a simple workaround would be to manually trigger the update by inserting 
> "self.plot.autoRange()" after your self.spectrum.setData(data) line. Not 
> ideal, but seems to work.
>
> Patrick
>
>
> On Tuesday, 18 September 2018 05:54:18 UTC+9:30, GR wrote:
>>
>>
>> Hi,
>>
>> I am using the following code to generate png files with PyQtGraph. 
>>
>> The code works quite well, but unfortunately, the first loop / picture 
>> ("0exported_image.png", that is: runner = 0) does not have any data in the 
>> output picture (respectively: has only default values in the exported 
>> graph). 
>> I additionally set a manual breakpoint in "update_data" and looked at 
>> the attributes of the class instance for runner = 0 and runner >0. It 
>> strikes that at several parts of the object tree the "picture" is set for 
>> runner >0, but is not for runner = 0:
>>
>> "picture": {
>>     "py/object": "PyQt5.QtGui.QPicture"
>> },
>>
>>
>>
>> This is the code I use. Does anybody have an idea what could be the 
>> reason for this? 
>>
>> Thanks in advance.
>>
>> import numpy as np
>> from PyQt5 import QtWidgets
>> from PyQt5.QtCore import pyqtSignal, pyqtSlot
>> import pyqtgraph as pg
>> import pyqtgraph.exporters
>> from pyqtgraph.Qt import QtCore, QtGui
>> from pyqtgraph import GraphicsLayoutWidget
>> from threading import Thread, Event
>> import time
>>
>>
>> # Routine to acquire and serve data
>> # This might be a camera driver, notifying when a new frame is available
>> def generate_data(callback, threadkill):
>>     # while not threadkill.is_set():
>>     #     width = 1600
>>     #     data = np.zeros(width)
>>     #     runner = int(np.random.random()*5)
>>     #     data.fill(runner)
>>     #     callback(data, runner)
>>     #     time.sleep(0.01)
>>     for runner in range(5):
>>         width = 1600
>>         data = np.zeros(width)
>>         data.fill(runner)
>>         my_var = callback(data, runner)
>>         time.sleep(0.01)
>>         print("callback called")
>>
>>     # threadkill.set()
>>     # # sys.exit(1)
>>
>>
>> class PyQtGraphTest(GraphicsLayoutWidget):
>>     # Signal to indicate new data acquisition
>>     # Note: signals need to be defined inside a QObject class/subclass
>>     data_acquired = pyqtSignal(np.ndarray, int)
>>
>>     def __init__(self):
>>         super().__init__()
>>         self.exporter = None
>>
>>         self.setWindowTitle('Test pyqtgraph paint signals')
>>         self.resize(640, 400)
>>         self.plot = self.addPlot()
>>         self.spectrum = self.plot.plot()
>>         self.plot.enableAutoRange(pg.ViewBox.XYAxes)
>>
>>         # Connect the signal
>>         self.data_acquired.connect(self.update_data)
>>
>>         # Make and start the background thread to acquire data
>>         # Pass it the signal.emit as the callback function
>>         self.threadkill = Event()
>>         self.thread = Thread(target=generate_data, 
>> args=(self.data_acquired.emit, self.threadkill))
>>         self.thread.start()
>>
>>         self.thread.join()
>>         # my_var = self.thread.isAlive()
>>         # print("my_var:", my_var)
>>         # self.threadkill.set()
>>         # print("fin")
>>
>>     # Kill our data acquisition thread when shutting down
>>     def closeEvent(self, close_event):
>>         self.threadkill.set()
>>
>>     # Slot to receive acquired data and update plot
>>     @pyqtSlot(np.ndarray, int)
>>     def update_data(self, data, runner):
>>         if not self.exporter:
>>             # Here we are passing the exporter the GraphicsLayout object 
>> that is
>>             # the central item (ci) inside this GraphicsLayoutWidget. That in
>>             # turn contains the two PlotItem objects.
>>             self.exporter = pg.exporters.ImageExporter(self.ci)
>>             self.exporter.parameters()['width'] = 640
>>
>>         self.spectrum.setData(data)
>>         self.exporter.export(str(runner) + 'exported_image.png')
>>         print("exported image")
>>
>>
>> if __name__ == '__main__':
>>     import sys
>>
>>     app = QtWidgets.QApplication(sys.argv)
>>     window = PyQtGraphTest()
>>     window.show()
>>     if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
>>         sys.exit(app.exec_())
>>
>>     print("fin2")
>>
>>

-- 
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/14056ac8-a80f-4c2c-876b-1162e1157f28%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to