[PyQt] Any way to run code before each QThread?
Chris Pezley
chris at pezley.net
Mon Jul 16 13:30:16 BST 2018
If anyone wants to know what a monkey patch for that would look like
(hacky^H^H^H^H^Hcreative):
import weakref
import site
site._qthread_instances = weakref.WeakSet()
import PyQt5.QtCore
@staticmethod
def __new__(cls, *args, **kwargs):
obj = super(PyQt5.QtCore.QThread, cls).__new__(cls, *args,
**kwargs)
site._qthread_instances.add(obj)
return obj
PyQt5.QtCore.QThread.__new__ = __new__
You then access the list through site. You just need to make sure that
this loads before the user code, though. I guess since coverage has an
entry-point Ned doesn't need to worry about that.
On 07/16/2018 01:57 PM, Florian Bruhin wrote:
> On Mon, Jul 16, 2018 at 01:52:38PM +0200, Chris Pezley wrote:
>> You can track all instances of a class in python by creating a cache which
>> is populated when __new__ is called:
>>
>> [...]
> You need to use your custom MyQThread subclass everywhere for it to work
> though - in the case of coverage.py, I'm guessing users don't want their
> code to change (and depend on coverage.py) just to measure coverage.
>
> (coverage.py could monkeypatch the QThread class like apparently Eric
> and Wing IDE do, but I assume that comes with some nasty gotchas)
>
> Florian
>
More information about the PyQt
mailing list