[PyQt] Decorated slot has no compatible signature
Tony Arnold
tony.arnold at manchester.ac.uk
Mon Nov 21 13:42:11 GMT 2016
On Sun, 2016-11-20 at 22:46 +0000, Tony Arnold wrote:
> Florian,
>
> On Sun, 2016-11-20 at 21:19 +0100, Florian Bruhin wrote:
> > * Tony Arnold <tony.arnold at manchester.ac.uk> [2016-11-20 19:16:01
> > +0000]:
> > > I'm using QNetworkManager to upload some files to a site. To see
> > > the
> > > progress I've defined a slot that gets connected to the
> > > uploadProgress
> > > signal.
> > >
> > > The slot is defined:
> > >
> > > @pyqtSlot(int, int)
> > > def updateDataTransferProgress(self, readBytes, totalBytes):
> > >
> > > and is connected to a reply object thus:
> > >
> > > reply.uploadProgress.connect(self.updateDataTransferProgress)
> > >
> > > However, this gives the error message:
> > >
> > > TypeError
> > > "decorated slot has no signature compatible with
> > > uploadProgress(qint64,qint64)"
> > >
> > > I'm running on Ubuntu 16.10 which has PyQt5.7. I believe slot
> > > verification has been tightened
> > > up in this version, but as far as I can see the above declaration
> > > is correct.
> > >
> > > How can I fix this?
> >
> > Use @pyqtSlot('qint64', 'qint64') instead.
>
> Thanks. I tried this and I now get
>
> The debugged program raised the exception unhandled TypeError
> "connect() failed between uploadProgress(qint64,qint64) and
> updateDataTransferProgress()"
A bit more experimenting. I took Florian's code from https://riverbankc
omputing.com/pipermail/pyqt/2016-April/037370.html and modified it to
put the slot inside a class. And it failed. It also fails changing the
decoration to use 'qint64'. It fails with:
QObject::connect: Cannot connect
QNetworkReplyHttpImpl::downloadProgress(qint64,qint64) to
(null)::slot(qint64,qint64)
Traceback (most recent call last):
File "slot_example.py", line 16, in <module>
reply.downloadProgress.connect(obj.slot)
TypeError: connect() failed between downloadProgress(qint64,qint64) and
slot()
Here is the version of the code:
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import pyqtSlot, QUrl
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest
class test():
@pyqtSlot('qint64', 'qint64')
def slot(self, num1, num2):
pass
a = QApplication([])
obj=test()
nam = QNetworkAccessManager()
reply = nam.get(QNetworkRequest(QUrl('http://www.riverbankcomputing.com
/')))
reply.downloadProgress.connect(obj.slot)
a.exec_()
Can others get this to work, or could this be to do with my system? Ím
running on Ubuntu 16.10.
Regards,
Tony.
--
Tony Arnold MBCS, CITP | Senior IT Security Analyst | Directorate of IT Services | G64, Kilburn Building | The University of Manchester | Manchester M13 9PL | T: +44 161 275 6093 | M: +44 773 330 0039
More information about the PyQt
mailing list