Journal Un petit script pour les utilisateurs de tablettes

Posté par . Licence CC by-sa
10
17
fév.
2013

Bonjour à tous
Ayant fait l'acquisition d'une tablette ASUS T101mt il y a maintenant 3 ans, je regrettais de ne pas pouvoir utiliser les gestes habituel utilisés sur les smartphones pour faire défiler les pages (c'est à dire le bouton de souris appuyer et un mouvement sur la gauche ou sur la droite pour faire page suivante/précédente). Comme j'avais rien de mieux à faire aujourd'hui, j'ai fait un petit script python qui fait le boulot. C'est pas parfait, mais ça marche.

Vous aurez besoin de python-xlib pour que ça fonctionne.
Je ne l'ai testé que sous debian squeeze.

Pour ceux qui serai intéressé voilà le script.
En espérant que ce sera utile à quelqu'un.

xslide_ev.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#

# Description: Script qui assoscie les gestes mouvements de souris gauche/droite
# avec le bouton 1 de la souris appuyer aux touches page suivante/precedente
# du clavier

#keycode pour page précedente/suivante
PGUP=112
PGDOWN=117

#Temps mini et maxi pour le detection du mouvement
TMIN=0.25
TMAX=.8

#Distance mini(en pixel) a parcourir pour la detection du mouvement
DIST=100

import Xlib
from Xlib import X, display
import time
sroot=display.Display().screen().root
state=0
slide=0
x=sroot.query_pointer()._data["root_x"]


while True:
    d = sroot.query_pointer()._data
    if d['mask']==0:
        state=0
    if d['mask']==0 and slide==1:
        #page down
        slide=0
        Xlib.ext.xtest.fake_input(d['root'],Xlib.X.KeyPress, PGDOWN)
        Xlib.ext.xtest.fake_input(d['root'],Xlib.X.KeyRelease, PGDOWN)

    elif d['mask']==0 and slide==-1:
        #page up
        slide=0
        Xlib.ext.xtest.fake_input(d['root'],Xlib.X.KeyPress, PGUP)
        Xlib.ext.xtest.fake_input(d['root'],Xlib.X.KeyRelease, PGUP)


    if d['mask']==256:
        if state==0:
            t=time.time()
            x=d["root_x"]
        state=1

    if state==1 and time.time()-t>TMIN  and d["root_x"]-x>DIST:
        slide=1
    if state==1 and time.time()-t>TMIN  and d["root_x"]-x<-DIST:
        slide=-1
    if (slide==1 or slide==-1) and time.time()-t>TMAX:
        slide=0

  • # sympa de partager

    Posté par (page perso) . Évalué à 4.

    Je n'en ai aucune utilité sur mon laptop, j'ai testé pour voir et ça marche pas mal, la sélection d'un texte en entier peut faire pageUp / pageDown mais à part ça c'est marrant

    • [^] # Re: sympa de partager

      Posté par . Évalué à 1.

      J'avais remarquer ça. Tous ce que j'ai trouver pour limiter le problème c'est d'ajuster le variable TMIN ,TMAX et DIST. Une autre chose qui pourrait encore limiter le problème serai d'ajouter un contrôle sur l'axe Y, puisqu'on suppose que le mouvement doit ce faire sur l'axe X seulement. Je vais voir à ajouter ces quelques lignes, ça pourra rendre le script plus utilisable.
      Après je ne vois pas trop comment je pourrais supprimer totalement le problème.

      • [^] # Re: sympa de partager

        Posté par . Évalué à 1.

        En prenant en compte la vitesse de déplacement par exemple ?

        • [^] # Re: sympa de partager

          Posté par (page perso) . Évalué à 2.

          Je pense pas, pour avoir testé 2min je vais à peu près à la même vitesse pour l'un ou pour l'autre.

          Après j'ai du mal à voir sur une tablette ce que ça donne, si c'est vraiment pareil que sur pc ou pas.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.