python
[Python] Récupérer les évènements souris sans prendre le focus
1Dans le cadre de LoPlug, j’ai besoin de récupérer les évènements souris sur un second écran tout en continuant à jouer sur LockOn sur le premier. Sans rien, lors du clic sur le second écran, le focus est donné à LoPlug et LockOn se réduit dans la barre des tâches, c’est un peu embêtant…
L’astuce consiste à utiliser PyHook et de court-circuiter la pile d’évènements windows en s’insérant dedans. On récupère alors les informations, mais on empêche le changement de focus. Ensuite, il suffit de réinjecter l’évènement souris dans PyQt (voic ici ) et le tour est joué! On peut désormais cliquer sur les instruments ou les widgets de LoPlug tout en jouant.
bien sur, cette astuce doit fonctionner pour d’autres cas.
De plus, PyHook, permet de gérer des raccourcis claviers et d’intercepter les appuis touches du clavier mais aussi des joysticks, bref il est très utilisé pour LoPlug.
L’implémentation dans LoPlug est dispo ici: http://lotatc.dartsite.org/browser/trunk/loplug/plugins/input/pginput.py
[PyQt] Générer un évènement souris/clavier
1Pour générer un évènement souris et/ou clavier sous PyQt (idem pour Qt), il faut récupérer la widget située sous le curseur de la souris avec :
QWidget.itemAt( pos )
Puis utiliser l’API:
ne = QMouseEvent(QEvent.MouseButtonPress, pos_for_my_widget , Qt.LeftButton, Qt.LeftButton, Qt.NoModifier)
QApplication.postEvent(my_widget, ne)
Attention, l’évènement n’est pas envoyé aux enfants, il faut donc bien faire attention à la widget à qui on l’envoi.