# Autres langages > Python > GUI >  Gestion evenements externe  l'application

## atalon1

Bonjour, est-il possible, que ce soit avec Tk, Wx ou PyQt de capturer des venements extrieurs  l'application python?

Je n'ai trouv que ce post:
http://www.developpez.net/forums/d54...urs-programme/
mais il ne contient pas de rponse  ma question.

Pour mieux me faire comprendre:
en fait je veux faire une petite application de type launcher qui tourne en tache de fond et que l'on peut appeler  tout moment (donc quand l'application n'a pas le focus) avec un raccourci clavier. D'o ma question sur la capture d'venements en dehors de l'application.

Une ide?

Merci d'avance.

----------


## atalon1

J'ai trouv pyhook:
http://pyhook.wiki.sourceforge.net/

ca a l'air de faire ce que je demande mais c'est plateforme (windows) dpendant. Pour l'instant ca me va mais peut tre qu'il existe quelque chose qui soit plateforme indpendant?

Question   ceux qui connaissent PyQt:
y a t il un quivalent intgr  Qt?

----------


## pacificator

Salut,

Je ne connais pas PyQT mais concernant *wxpython*, il est possible de crer des events personnaliss et de les envoyer  l'application via la mthode *wx.PostEvent*.

----------


## atalon1

Merci pour le tuyau sous wx. Donc, je vais essayer wx au lieu de qt.

J'ai essay de trouver un peu plus d'infos sur wx.postevent dans le cadre de l'utilisation que je veux en faire car je ne suis pour l'instant pas familier de wx (ni de qt), mais je n'ai pas trouv de tutoriel. En avez vous un "sous la main"?

Merci encore.

----------


## alexdevl

Dispo sur Dev.com


http://alain72.developpez.com/tutos/wxPython/

----------


## pacificator

Pour le *wx.PostEvent*, tu peux regarder le code source du compresseur de photos.

----------


## atalon1

Merci, je vais tudier cela de prs.

Merci et bonne ftes  tous.

----------


## atalon1

Je ne suis que dbutant en programmation, et je dcouvre tout juste wx, mais pour ce que j'ai pu voir dans l'exemple du recompresseur photo, wx.postevent s'utilise  partir du bouton compresser/arrter. Ce qui veut dire que l'application a toujours le focus et reoit donc un evenement.

Dans mon cas, je veux que mon application python reoive un vnement clavier alors que le focus est sur une autre application (firefox par exemple) de faon  ce qu'elle prenne le focus et face apparaitre sa propre fentre au premier plan.

J'espre que vous n'allez pas me dire que je n'ai rien compris  l'exemple du recompresseur photo...

----------


## DelphiManiac

Si c'est sous windows et seulement sous windows, l'api permets de capturer les vnements du systme.

Voir la doc ici : http://msdn.microsoft.com/en-us/library/ms997537.aspx

Par contre python ne permets pas d'attaquer l'api windows directement, il faut passer par une extension  python qui se trouve ici et qui permets d'appeler les fonctions de l'api windows par python, mais je ne sais pas si l'on peut tout faire.

http://starship.python.net/crew/mhammond/

Aprs une petite recherche sur google, j'ai trouv un sujet qui en parle, mais la rponse semble tre qu'il est impossible de faire cel en python.

http://www.mail-archive.com/python-w.../msg03579.html

Essayes de chercher un peu par toi mme, les mot cls sont : win32 pyhon hook.

Dsol je n'ai pas plus d'lment que a et c'est un sujet assez complexe, mme quand on attaque l'api windows en natif.

[Edit]Je viens de relire la question de dpart : 


> Pour mieux me faire comprendre:
> en fait je veux faire une petite application de type launcher qui tourne en tache de fond et que l'on peut appeler  tout moment (donc quand l'application n'a pas le focus) avec un raccourci clavier. D'o ma question sur la capture d'venements en dehors de l'application.
> 
> Une ide?
> 
> Merci d'avance.


Si je m'en tiens  cette demande et toujours sous windows, tu as la possibilits d'associer un raccourci clavier  un raccourci poser sur le bureau (clic droit/proprits). Ce raccourci clavier  2 fonctions, soit de lancer ton application, si celle ci ne tourne pas, soit de ramener la fentre de ton application au premier plan si elle est dj active. Je pense que ca devrait correspondre  ta demande.

Fait un essai.

----------


## atalon1

Sous windows, pyhook fonctionne:
http://pyhook.wiki.sourceforge.net/pyHook_Tutorial

Note personnelle: mettre le 


```
pythoncom.PumpMessages()
```

de l'exemple du lien ci dessus aprs le 


```
MainLoop()
```

de votre propre application sinon le MainLoop ne semble pas se lancer.

Sous linux, j'ai vaguement vu quelque chose  propos de xlib... mais je me cantonne  windows pour l'instant!

----------


## atalon1

Pyhook fonctionne donc je n'ai pas test ce qui suit mais voici quelques ventuelles possibilits :

Pour wx, je viens de trouver cela (sous windows seulement apparemment...) pour le clavier :
http://docs.wxwidgets.org/stable/wx_...registerhotkey

Peut tre a pour la souris mais je ne suis pas sur d'avoir compris, donc je ne fais qu'mettre une hypothse:
http://docs.wxwidgets.org/stable/wx_...pturelostevent

C'est toujours bon  savoir au ca o....

----------


## atalon1

J'ai test le registerhotkey  et ca marche. voici un exemple pour alt+left inspir de l'exemple trouv ici:

Seul problme, seul les keycodes des touches spciales fonctionnent, pour les touches correspondant aux lettres de l'alphabet, j'ai essay VK_A mais cela ne fonctionne pas.

Une ide pour m'aider  utiliser n'imorte quelle touche (en fait je n'en ai pas besoin, mais cela peut servir incessamment sous peu...)?
Note j'ai trouv les codes ici  ou l par exemple.

autre question :  quoi sert le "hotkeyID", en effet cela ne change rien si j'en met un qui ne correspond pas  ce que j'ai dans la table key code.



```

```

----------

