[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] Can't pass a dict to a signal that expects QJsonObject
From:       Phil Thompson <phil () riverbankcomputing ! com>
Date:       2017-07-10 16:59:04
Message-ID: 56466FB9-F15D-4F80-9BE1-17B1E3DC3A07 () riverbankcomputing ! com
[Download RAW message or body]

On 7 Jul 2017, at 3:15 pm, Davi Ramos <davirtavares@gmail.com> wrote:
> 
> I way to bypass this (pointed out by altendky) is to convert all the values of the \
> dict to QVariant before sending it to the signal: 
> d = {k: v.toVariant() for k, v in message.object().items()}
> doc = QJsonDocument(d)
> self.messageReceived.emit(doc.object(), self) # that works fine
> 
> There's also another issue (which could be related or not to this):
> 
> d = {'a': 1}
> j = PyQt5.QtCore.QJsonDocument(d)
> o = j.object()
> j = PyQt5.QtCore.QJsonDocument(o)
> 
> That fails:
> 
> TypeError: 'QJsonValue' object is not iterable
> 
> During handling of the above exception, another exception occurred:
> 
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> SystemError: <class 'PyQt5.QtCore.QJsonDocument'> returned a result with an error \
> set 
> Here is a more readable example by altendky: \
> https://gist.github.com/altendky/a64a7094524c68734de6fb59727d67b0

Should be fixed in tonight's snapshot.

> --
> Davi R. Tavares
> 
> On Fri, Jul 7, 2017 at 9:58 AM, Davi Ramos <davirtavares@gmail.com> wrote:
> Versions of PyQT tested: 5.8.2 and 5.9
> 
> Basically there is a signal on QWebChannelAbstractTransport called \
> "messageReceived" and it's signature is as follow: 
> void messageReceived(const QJsonObject &message, QWebChannelAbstractTransport \
> *transport) 
> According to PyQt documentation, QJsonObject is internally converted to "dict", but \
> when I try to emit that signal passing a dict that was returned from \
> QJsonDocument.object(), it fails: 
> message = QJsonDocument.fromJson(messageData.encode("utf-8"), parser_error)
> self.messageReceived.emit(message.object(), self)
> 
> Traceback (most recent call last):
> File "main.py", line 54, in textMessageReceived
> self.messageReceived.emit(a, self)
> TypeError: messageReceived(self, Dict[str, Union[QJsonValue, QJsonValue.Type, \
> Iterable[QJsonValue], bool, int, float, str]], \
> QWebChannelAbstractTransport).emit(): argument 1 has unexpected type 'dict' Aborted
> 
> I tried passing an empty dict {} and it worked (although it failed later cause of \
> other reasons, but the signal was emitted). 
> A better context is provided here: https://pastebin.com/knJr26Rj

That code is incomplete. If the above fix doesn't work for this problem can you send \
be a test that I can run?

Thanks,
Phil
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
https://www.riverbankcomputing.com/mailman/listinfo/pyqt


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic