Hi Frank ! I first attempted to re-create your issue but I didn’t have any problem on my end. ( using PySide2 + Python3)
That said when I tried the same thing using Python2 I had the same issue as you did. I made a few changes and here is an example I created for you which works for both Python 2 and 3. https://gitlab.com/talonrenaud/codeSharing/blob/master/urlImgLoader.py When using Python 3 “urllib.urlopen” returns a “bytes” object which PySide2 has no problem emitting and receiving as such: receivedData = Signal(bytes) With Python 2 though using “urllib2.urlopen” I can print the image data within the thread and when checking the type it says “str” (which is fine since “str” and “bytes” are the same from what I understand in Py2) That said after emitting the imgData as a string when I print the imgData type received from the signal it says “Unicode” instead of string and no matter what encoding I set it to (ascii, utf-8, utf-16) I can no longer read/print the imageData. I am not sure why, this could be a Py2 + PySide2 bug or issue ? To get around the issue I converted the data to a BytesIO object using the “io” module, setup the signal to use a “BytesIO” type instead of a “str” and that seems to work fine: receivedData = Signal(io.BytesIO) I am not sure if this is the most elegant way. I’m curious to know what you guys think about this. Take care, Renaud _______________________________________________ Renaud Talon Pipeline / TD FuseFX 14823 Califa Street Los Angeles, CA 91411 Office: 818-237-5052 Mobile: 310-430-8834 www.FuseFX.com<http://www.fusefx.com/> From: PySide [mailto:[email protected]] On Behalf Of Frank Rueter | OHUfx Sent: Sunday, October 22, 2017 2:20 AM To: [email protected] Subject: Re: [PySide] sending data from urllib2.urlopen().read() via signal corrupts in receiver quick follow up: I am now writing the files to a temp directory and only passing the respective path via the signal, but I'm still curious how I would do this without writing anything to disk. Cheers, frank On 10/22/2017 09:18 PM, Frank Rueter | OHUfx wrote: Hi, I am downloading a few images in a separate thread using QRunnable. To download I am just using urllib2.urlopen() like this: [...] def run(self): imageData = urllib2.urlopen(self.url).read() print 'emitted:', imageData self.signals.receivedData.emit(imageData) # this signal is declared like this: QtCore.Signal(str) However, the receiving slot is receiving nothing: def setPixmap(self, imageData): print 'received:', imageData pixmap = QtGui.QPixmap() pixmap.loadFromData(imageData) self.data['pixmap'] = pixmap I guess this is too naive an approach to download image data in a separate thread?! How can I fix this please? Cheers, frank -- [ohufxLogo 50x50]<http://www.ohufx.com> vfx compositing<http://ohufx.com/index.php/vfx-compositing> | workflow customisation and consulting<http://ohufx.com/index.php/vfx-customising> _______________________________________________ PySide mailing list [email protected]<mailto:[email protected]> http://lists.qt-project.org/mailman/listinfo/pyside
_______________________________________________ PySide mailing list [email protected] http://lists.qt-project.org/mailman/listinfo/pyside
