[PyQt] Cooperative multi-inheritance with QObject + QRunner

Phil Thompson phil at riverbankcomputing.com
Tue May 31 10:01:29 BST 2016


On 31 May 2016, at 8:53 am, Elvis Stansvik <elvstone at gmail.com> 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)
> 
>    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?

Correct - the usual restrictions on multiple inheritance of C++ classes.

Phil


More information about the PyQt mailing list