[PyQt] Cooperative multi-inheritance with QObject + QRunner

Elvis Stansvik elvstone at gmail.com
Tue May 31 09:24:35 BST 2016


2016-05-31 10:19 GMT+02:00 Barry Scott <barry at barrys-emacs.org>:
> On Tuesday 31 May 2016 09:53:43 Elvis Stansvik wrote:
>> Hi all,
>>
>> I tried subclassing both QObject and QRunnable, like this:
>>
>> class Job(QObject, QRunnable):
>>
>>     finished = pyqtSignal()
>>
>>     def __init__(self, *args, **kwargs):
>>         super().__init__(*args, **kwargs)
>
> super only call init for QObject()
> you need to call __init__ for QRunnable.

Hm, I thought that with PyQt5, only a single call is required, since
PyQt classes now support cooperative multi-inheritance:

    http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html#cooperative-multi-inheritance

Elvis

>
>>
>>     def run(self):
>>         pass  # Do stuff
>>         self.finished.emit()
>>
>> But trying to run it on a QThreadPool with
>>
>>     job = Job()
>>     QThreadPool.globalInstance().start(job)
>>
>> I get
>>
>>     TypeError: could not convert 'Job' to 'QRunnable'
>>
>> Is it impossible to leverage PyQt's support for cooperative
>> multi-inheritance in this case?
>>
>> I'd like the class to be a QObject, so that I can emit signals from
>> it, but at the same time a QRunnable so that I can run it on a
>> QThreadPool. AFAIK this is possible from C++, but looks like it won't
>> work with PyQt?
>>
>> Thanks in advance,
>> Elvis
>> _______________________________________________
>> PyQt mailing list    PyQt at riverbankcomputing.com
>> https://www.riverbankcomputing.com/mailman/listinfo/pyqt
>


More information about the PyQt mailing list