[PyQt] Bug in QAbstractNativeEventFilter in PyQt 5.1.1?
    Klemetti, Antti 
    antti.klemetti at f-secure.com
       
    Tue Dec 10 08:52:24 GMT 2013
    
    
  
Hi,
Our application subclasses QAbstractNativeEventFilter and
reimplements function QAbstractNativeEventFilter.nativeEventFilter
to catch application specific messages on Windows.
The Python version used is 3.3.2.
It seems that the PyQt implementation of QAbstractNativeEventFilter.nativeEventFilter
has a slightly modified function signature from that of Qt5 C++.
The Qt5 C++ function takes three parameters: eventType, message and result.
The PyQt version takes two parameters: eventType, message as input and
returns a tuple of bool and int, where int is the result.
The modified signature is not a problem, but there is some bug in the PyQt5 implementation.
If I return anything else than None as the result from my nativeEventFilter function,
PyQt5 implementation crashes.
If I return None, stderr gets the following error message:
"TypeError: invalid result type from WinEventFilter.nativeEventFilter()".
Here is our subclass implementation:
-----
    class WinEventFilter(QAbstractNativeEventFilter):
        def __init__(self, my_windows_message, log):
            QAbstractNativeEventFilter.__init__(self)
            self.my_windows_message = my_windows_message
            self.log = log
        def nativeEventFilter(self, eventType, message): # pylint: disable=W0613
            try:
                msg = ctypes.wintypes.MSG.from_address(message.__int__()) # pylint: disable=E1101
                if msg.message == self.my_windows_message:
                    # Handling for our special Windows message
                    pass
            except:
                self.log.exception("Exception in WinEventFilter.nativeEventFilter")
            dummy_result = None
            return False, dummy_result # False lets the event propagate freely
-----
BR, Antti
    
    
More information about the PyQt
mailing list