Simulation de frappe clavier avec Python 3.6
Bonjour à tous.
J'ai un script Python qui,pour faire court, a la structure suivante
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| #! /usr/bin/env python3
# -*- coding: utf-8 -*-
import gui
import fichiers_6
def filtre(event)
global,a,b,c,d
lt = str(event.keysym)
if lt != "q" and lt != "F12" and lt != KP_1:
return
if contexte == 1:
....
....
return
if contexte == 2:
....
....
return
if contexte == 3:
....
....
return
# point d'entrée
initialisation() # il s'agit d'une fonction qui est dans le module fichiers_6
print('pref ', dicoPref)
print('stat ', dicoStat)
...
...
...
fen1.bind('<KeyPress>', filtre)
fen1.mainloop() |
Evidemment le traitement des conditions contexte = 1, 2, 3 contient des appels à de nombreuses fonctions et tout ce passe bien en mode manuel normal. Il suffit d'appuyer sur l'une des touches que j'ai choisies de façon arbitraire pour déclencher le traitement souhaité. Tout serait donc parfait si j'en restait là. Mais il se trouve que pour pouvoir exploiter les informations récoltées, j'ai besoin de laisser tourner ce script plusieurs heures. J'ai donc intégré à ce script un mode dit 'AUTO' qui le répète indéfiniment en pressant à chaque fois la touche 1 du pavé numérique à ma place avec quelque part une boucle while qui relance le processus tant que la variable auto est True.
et ca marche. Heu, presque bien car je m'embrouille pour stopper l'essai et si j' interrompt le script brutalement des fichiers qui devraient être écrits ne le sont pas, et ça plante lamentablement.
Alors ma question est très simple
Comment faire pour que l'avant dernière ligne du programme contienne autre chose que ('<KeyPress>') ? Autrement dit comment faire pour que je fasse croire au script que j'ai effectivement tapé KP_1 pour le lancer manuellement ? Après cela il me suffira à l'entrée de la fonction filtre(event) d'autoriser l'entrée d'une touche supplémentaire qui interrompra le mode AUTO.
Je précise que pour rendre le script automatique, j'ai rajouté ceci à la fin
Code:
1 2 3 4
| auto = True
while auto == True:
lt ="KP_1"
mon_filtre(lt) |
et pour cela supprimé les évènements clavier. Donc comment faire ?