[PyQt] How to connect the activated signal of QWinEventNotifier to a custom slot in pyqt 5.6

Phil Thompson phil at riverbankcomputing.com
Wed Feb 1 15:50:45 GMT 2017


On 31 Jan 2017, at 1:06 pm, Phil Thompson <phil at riverbankcomputing.com> wrote:
> 
> On 31 Jan 2017, at 12:39 pm, slepton at posteo.de wrote:
>> 
>> Hi Phil
>> 
>> unfortunaly it didn't work. A minimal example of what I am doing (wrong):
>> 
>> 
>> import ctypes
>> import win32event
>> from PyQt5.QtCore import QObject, pyqtSlot
>> from PyQt5.QtCore import QWinEventNotifier
>> 
>> 
>> class MyController(QObject):
>> 
>>   def __init__(self, connect_to_decorated_slot=True) -> None:
>>       super().__init__()
>>       self.win_receive_event = int(win32event.CreateEvent(None, 0, 0, None))
>>       self.qt_read_event_notifier = QWinEventNotifier(ctypes.c_int(self.win_receive_event), parent=self)
>>       if connect_to_decorated_slot == True:
>>           self.qt_read_event_notifier.activated.connect(self.decorated_event_slot)
>>       else:
>>           self.qt_read_event_notifier.activated.connect(self.event_slot)
>> 
>>   def event_slot(self, event):
>>       print('Event')
>> 
>>   @pyqtSlot('Qt::HANDLE')
>>   def decorated_event_slot(self, event):
>>       print('Event')
>> 
>> 
>> Running the code I get the following output(s):
>> 
>>>>> MyController(connect_to_decorated_slot=True)
>> 
>> Traceback (most recent call last):
>> File "<pyshell#0>", line 1, in <module>
>>   MyController(connect_to_decorated_slot=True)
>> File "D:/test.py", line 14, in __init__
>>   self.qt_read_event_notifier.activated.connect(self.decorated_event_slot)
>> TypeError: connect() failed between activated(Qt::HANDLE) and decorated_event_slot()
>> 
>> 
>>>>> MyController(connect_to_decorated_slot=False)
>> 
>> Traceback (most recent call last):
>> File "<pyshell#1>", line 1, in <module>
>>   MyController(connect_to_decorated_slot=False)
>> File "D:/test.py", line 16, in __init__
>>   self.qt_read_event_notifier.activated.connect(self.event_slot)
>> TypeError: connect() failed between activated(Qt::HANDLE) and unislot()
>> 
>> 
>> I guess I am completely missing something...
> 
> No, it's PyQt not handling a Qt weirdness properly. The actual type is 'HANDLE' but this is a type that is private to QWinEventNotifier.
> 
> Unfortunately I don't think there is a workaround until I fix it properly.

There is an untested fix in tonight's PyQt5 snapshot.

Phil


More information about the PyQt mailing list