2009-07-18 9 views
1

En ce moment j'essaie d'utiliser Python pour détecter quand le bouton gauche de la souris est maintenu, puis commencer à envoyer rapidement cet événement au lieu d'une seule fois. Ce que je veux essentiellement faire est que lorsque le bouton gauche de la souris est maintenu, il clique et clique à nouveau jusqu'à ce que vous le laissiez partir. Mais je suis un peu perplexe avec l'ensemble de Xlib, je pense que c'est très confus en fait. Toute aide sur la façon de le faire serait vraiment génial. C'est ce que j'ai jusqu'ici:Python Xlib catch/send mouseclick

#!/usr/bin/env python 

import Xlib 
import Xlib.display 

def main(): 
    display = Xlib.display.Display() 
    root = display.screen().root 
    while True: 
     event = root.display.next_event() 
     print event 

if __name__ == "__main__": 
    main() 

Mais il n'y a malheureusement pas de sortie dans la console. Après une recherche rapide sur Internet, j'ai trouvé ce qui suit:

root.change_attributes(event_mask=Xlib.X.KeyPressMask) 
root.grab_key(keycode, Xlib.X.AnyModifier, 1, Xlib.X.GrabModeAsync, 
       Xlib.X.GrabModeAsync) 

Ceci est apparemment importation pour attraper un événement spécial avec le code d'activation donné. Mais d'abord, quel code clé le clic gauche de la souris a-t-il, le cas échéant? Et deuxièmement, comment puis-je détecter quand il est maintenu et ensuite commencer à envoyer l'événement mouseclick rapidement. Je serais vraiment reconnaissant pour l'aide. (Peut-être un moyen d'arrêter ce script avec une touche de raccourci serait aussi bien ...)

+0

Voici un [exemple officiel] (https://sourceforge.net/p/python-xlib/code/ HEAD/tree/trunk/examples/record_demo.py) montrant l'enregistrement des clics, des mouvements de la souris et des touches. – opyate

Répondre

4

En fait, vous voulez Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask, pour obtenir des événements pour les presses et les communiqués de bouton (différent des presses et des versions de touches). Les événements sont ButtonPress et ButtonRelease, et la variable d'instance detail vous donne le numéro du bouton. De l'événement de presse au moment de la publication, vous savez que le bouton est maintenu enfoncé. Bien sûr, vous pouvez également recevoir des événements clés et faire autre chose (par exemple, quitter votre script) lorsqu'une certaine touche est enfoncée.

Modifier: cette version fonctionne bien pour moi, par exemple ...:

import Xlib 
import Xlib.display 

def main(): 
    display = Xlib.display.Display(':0') 
    root = display.screen().root 
    root.change_attributes(event_mask= 
     Xlib.X.ButtonPressMask | Xlib.X.ButtonReleaseMask) 

    while True: 
     event = root.display.next_event() 
     print event 

if __name__ == "__main__": 
    main() 
+0

Alors, comment pourrais-je spécifier "root.grab_key"? – cryzed

+0

Juste essayé plusieurs combinaisons, rien n'a fonctionné :(Pourriez-vous me faire une faveur et écrire rapidement le script ou au moins la base? Sinon, je sais que cela prendrait pour toujours jusqu'à ce que je l'ai finalement fonctionné bien que ce ne soit pas compliqué. Je serais vraiment reconnaissant – cryzed

+0

Voir la modification de ma réponse Comme vous ne voulez pas attraper une clé, il n'y a bien sûr pas besoin d'appeler grab_key BTW, pour en savoir plus sur la touche grab, voir http://tronche.com/gui /x/xlib/input/XGrabKey.html (plus généralement, vous avez besoin de X11 familiarity & docs pour utiliser Python Xlib avec succès.) –