[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