[PyQt] How to connect the activated signal of QWinEventNotifier to a custom slot in pyqt 5.6
slepton at posteo.de
slepton at posteo.de
Tue Jan 31 12:39:53 GMT 2017
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...
Sebastian
Am 31.01.2017 13:14 schrieb Phil Thompson:
> On 31 Jan 2017, at 11:59 am, slepton at posteo.de wrote:
>>
>> Hi Phil,
>>
>> thanks for the quick reply.
>>
>>
>> 1. Looking at QWinEventNotifier the Signal is voidptr, right?
>>
>> class QWinEventNotifier(QObject):
>> """
>> QWinEventNotifier(parent: QObject = None)
>> QWinEventNotifier(sip.voidptr, parent: QObject = None)
>> """
>> def activated(self, sip_voidptr): # real signature unknown;
>> restored from __doc__
>> """ activated(self, sip.voidptr) [signal] """
>> pass
>>
>>
>>
>> 2. Looking at the connection error
>>
>> TypeError: connect() failed between activated(Qt::HANDLE)
>>
>> I would assume, that voidptr is acctually a Qt::HANDLE
>> (http://doc.qt.io/qt-5.6/qt.html#HANDLE-typedef) which I couldn't
>> find in from PyQt5.QtCore import Qt , is this even the right place to
>> look?
>>
>>
>>
>> 3. I am not sure I understand correctly what to do, so far the slot I
>> connected to looked like
>>
>> @pyqtSlot(int)
>> def event_slot(self, event):
>> # do something ...
>>
>> For the @pyqtSlot decorator I additionally tried @pyqtSlot() and in a
>> desperate attempt @pyqtSlot(ctypes.c_int) since this would be the
>> correct type for the win32event.
>>
>> What decorator can I use to further track down the problem?
>
> @pyqtSlot('Qt::HANDLE')
>
> should work, but you don't need a decorator at all.
>
> Phil
More information about the PyQt
mailing list