Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 30/04/2018, à 17:17

sten11

Re : Problème Installation Ximput

Je vais essayer de faire avant la fin de semaine un programme alternatif pour résoudre ton problème.

Merci beaucoup !

Donc en attendant pour pouvoir travailler, tout ce que j'ai à faire, c'est remettre la commande qui à réglé le problème de pression chaque fois que je rallume l'ordinateur c'est ça ?

Hors ligne

#27 Le 30/04/2018, à 17:34

Nuliel

Re : Problème Installation Ximput

Exactement.
Et si tu veux pouvoir utiliser aussi les boutons:

xsetwacom set "Wacom Intuos S 2 Pad pad" Button 1 "key esc"

permet d'affecter au bouton 1 (attention, les boutons n'ont pas forcément un ordre logique et peuvent le pas être à la suite) le bouton Echap

xsetwacom set "Wacom Intuos S 2 Pad pad" Button 1 "key +ctrl z"

pour annuler (ctrl+z), ici le + signifie que c'est pas "on appuie sur ctrl, on relache et on appuie sur z" mais bien "on laisse appuyé sur ctrl et on appuie sur z et on relache tout"

Hors ligne

#28 Le 03/05/2018, à 15:39

Nuliel

Re : Problème Installation Ximput

J'ai bien avancé sur le programme, j'ai pas encore codé les fonctions importer et sauvegarder (ça sauvegardera simplement dans un fichier texte), et j'ai bien entamé la fonction appliquer qui applique les changements.
Je préviens tout de suite: ne t'attends pas à un truc joli smile (et pour les codeurs: le code est pas joli non plus) (et j'ai pas de tablette graphique pour tester mon programme, tu seras béta testeur smile )

Dernière modification par Nuliel (Le 03/05/2018, à 19:31)

Hors ligne

#29 Le 04/05/2018, à 15:14

Nuliel

Re : Problème Installation Ximput

J'ai abandonné la partie importer pour l'instant, c'est peut être pas le truc le plus important pour l'instant (avoir un truc qui marche pour toi, ce serait déjà pas mal)
Donc voici les étapes:
1) copier

# -*- coding: utf-8 -*-

global nomPad
global nomStylet
nomPad="Wacom Intuos S 2 Pad pad"
nomStylet="Wacom Intuos S 2 Pen stylus"

global listeBoutonsPad
global listeBoutonsStylet

from tkinter import *
import subprocess
import os
import pickle

fen = Tk()
#entrée: liste de lettres correspondant aux boutons pour en trouver leurs ID
#sortie: liste des id associées
def listeID(liste):
    l=[]
    for lettre in list(liste):
        l+=[ord(lettre)-97+1] # 97=ord("a")
    l.sort()
    return (l)


def appliquer(): # récupère l'état des boutons et applique la configuration à la tablette
    global listeBoutonsPad
    global listeBoutonsStylet
    #rotation du pad
    os.system("xsetwacom set '"+nomPad+"' Rotate "+valeurRot.get())
    #Threshold
    os.system("xsetwacom set '"+nomPad+"' Threshold "+boxThreshold.get())
    #Boutons du pad
    for i in range(0,len(entryboutonsPad)):
        os.system("xsetwacom set '"+nomPad+"' Button "+ str(listeBoutonsPad[i])+" "+entryboutonsPad[i].get())
    for i in range(0,len(entryboutonsStylet)):
        os.system("xsetwacom set '"+nomPad+"' Button "+ str(listeBoutonsStylet[i])+" "+entryboutonsStylet[i].get())


def sauvegarder():
    monport=open("wacomGUI.sh","w")
    global listeBoutonsPad
    global listeBoutonsStylet
    monport.write("#!/bin/bash\n")
    #rotation du pad
    monport.write("xsetwacom set '"+nomPad+"' Rotate "+valeurRot.get())
    monport.write("\n")
    #Threshold
    monport.write("xsetwacom set '"+nomPad+"' Threshold "+boxThreshold.get())
    monport.write("\n")
    #Boutons du pad
    for i in range(0,len(entryboutonsPad)):
        monport.write("xsetwacom set '"+nomPad+"' Button "+ str(listeBoutonsPad[i])+" "+entryboutonsPad[i].get())
        monport.write("\n")
    for i in range(0,len(entryboutonsStylet)):
        monport.write("xsetwacom set '"+nomPad+"' Button "+ str(listeBoutonsStylet[i])+" "+entryboutonsStylet[i].get())
        monport.write("\n")
    
    monport.close()



def creer():
    #gestion des widgets
    BoutonCreer.grid_forget()
    labelinfo.config(text="Cliquez sur l'entrée devant entreePad, et appuyez sur chaque bouton du pad.\n Faites de même avec le stylet (la mine qui touche le pad est considéré comme un bouton aussi")
    labelBoutonsPad.grid(row=2, column=1)
    labelBoutonsStylet.grid(row=3, column=1)
    entreePad.grid(row=2,column=2)
    entreeStylet.grid(row=3,column=2)
    BoutonOK.grid(row=4,column=2)
    #correpondance boutons <-> lettres alphabet
    alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    
    for i in range(1,20):
        os.system("xsetwacom set '"+nomPad+"' Button "+str(i)+" 'key "+alphabet[i-1]+"'")
    
    for i in range(2,6):
        os.system("xsetwacom set '"+nomStylet+"' Button "+str(i)+" 'key "+alphabet[i-1]+"'")

def ok():
    global listeBoutonsPad
    global listeBoutonsStylet
    listeBoutonsPad=listeID(list(entreePad.get()))
    listeBoutonsStylet=listeID(list(entreeStylet.get()))
    labelBoutonsPad.grid_forget()
    labelBoutonsStylet.grid_forget()
    entreePad.grid_forget()
    entreeStylet.grid_forget()
    BoutonOK.grid_forget()
    Etape3(listeBoutonsPad, listeBoutonsStylet)

def Etape3(listeBoutonsPad, listeBoutonsStylet):
    labelinfo.config(text="Sauvegarder permet d'enregistrer la configuration dans un fichier (pour l'instant pas appliquée au branchement de la tablette) et appliquer permet d'appliquer la configuration")
    frameThreshold.grid(row=3,column=1)
    BoutonAppliquer.grid(row=3,column=2)
    frameRot.grid(row=2, column=1)
    global entryboutonsPad
    entryboutonsPad=[]
    k=0
    for i in listeBoutonsPad:
        entryboutonsPad.append(Entry(frameBoutonsPad, textvariable="", width=30))
        labelBoutonsPadEtape3=Label(frameBoutonsPad, text="Bouton du pad "+str(i))
        labelBoutonsPadEtape3.grid(row=i, column=1)
        entryboutonsPad[k].grid(row=i, column=2)
        k=k+1
    frameBoutonsPad.grid(row=4,column=1)
    global entryboutonsStylet
    entryboutonsStylet=[]
    k=0
    for i in listeBoutonsStylet:
        entryboutonsStylet.append(Entry(frameBoutonsStylet, textvariable="", width=30))
        labelBoutonsStyletEtape3=Label(frameBoutonsStylet, text="Bouton du stylet "+str(i))
        labelBoutonsStyletEtape3.grid(row=i, column=1)
        entryboutonsStylet[k].grid(row=i, column=2)
        k=k+1
    frameBoutonsStylet.grid(row=5,column=1)
    BoutonSauvegarder.grid(row=3,column=3)
        


############################# Initialisation des widgets ##############################
#Etape 1: accueil

labelinfo=Label(fen, text="Cliquez sur Créer pour commencer la configuration de la tablette")

BoutonCreer=Button(fen,text="Créer",font=("courier",18,"bold"),command=creer)

#Etape 2: après appui sur créer
labelBoutonsPad=Label(fen, text="Pad:")
labelBoutonsStylet=Label(fen, text="Stylet:")

valeurPad = StringVar() 
entreePad = Entry(fen, textvariable=valeurPad, width=30)

valeurStylet = StringVar() 
entreeStylet = Entry(fen, textvariable=valeurStylet, width=30)

BoutonOK=Button(fen,text="OK",font=("courier",18,"bold"),command=ok)

#Etape 3:  après avoir rempli les champs de "créer"
frameThreshold=Frame(fen, borderwidth=2, relief=GROOVE)
labelThreshold=Label(frameThreshold, text="Threshold:")
boxThreshold=Spinbox(frameThreshold, from_=0, to=2047)
labelThreshold.grid(row=1,column=1)
boxThreshold.grid(row=1,column=2)

frameRot=Frame(fen, borderwidth=2, relief=GROOVE)
valeurRot = StringVar()
valeurRot.set("none")
boutonrot1 = Radiobutton(frameRot, text="Pas de rotation", variable=valeurRot, value="none")
boutonrot2 = Radiobutton(frameRot, text="Rotation à 180 degrés", variable=valeurRot, value="half")
boutonrot3 = Radiobutton(frameRot, text="Rotation à 90 degrés", variable=valeurRot, value="cw")
boutonrot4 = Radiobutton(frameRot, text="Rotation à -90 degrés", variable=valeurRot, value="ccw")
labelRot=Label(frameRot, text="rotation du pad:")
boutonrot1.grid(row=1,column=2)
boutonrot2.grid(row=2,column=2)
boutonrot3.grid(row=3,column=2)
boutonrot4.grid(row=4,column=2)
labelRot.grid(row=2, column=1)

BoutonAppliquer=Button(fen,text="Appliquer",font=("courier",18,"bold"),command=appliquer)
BoutonSauvegarder=Button(fen,text="Sauvegarder",font=("courier",18,"bold"),command=sauvegarder)

frameBoutonsPad=Frame(fen, borderwidth=2, relief=GROOVE)
frameBoutonsStylet=Frame(fen, borderwidth=2, relief=GROOVE)

########################### placement des widgets (etape 1) #####################################

labelinfo.grid(row=1,column=1)
BoutonCreer.grid(row=2,column=2)


fen.mainloop()

#subprocess.check_output(["xsetwacom", "list", "devices"])==b'':

dans un fichier nommé wacom.py dans le dossier personnel (remarque: pour une autre tablette, il faut adapter les variables globales nomPad et nomStylet en tout début de programme avec ce qui ressort de xsetwacom list devices)
2) dans un terminal, faire

sudo apt-get install python3-tk

3) dans un terminal, tu peux lancer

python3 wacom.py

Là, ma petite interface graphique devrait s'afficher. Quelques explications sur les étapes:
Etape 1: le bouton créer, à première vue c'est stupide de l'avoir mis, mais il y a en fait deux raisons:
i) au cas où tu lances sans faire exprès le programme, ça t'évite que le bouton 1 du pad fasse la lettre a, le bouton 2 la lettre b... (l'intérêt est qu'il peut y avoir 4 boutons, mais numérotés comme 1 3 4 7)
ii) je comptais mettre un bouton importer pour importer la configuration du fichier de sauvegarde et pouvoir directement l'éditer, mais je pense que tu préfèreras avoir un programme pas mal avancé aujourd'hui que plus tard.
Etape 2: elle permet de résoudre le problème de numérotation des boutons
Etape 3: peu de paramètres sont présents (tous les boutons, la rotation du pad et le threshold), j'ajouterai au fur et à mesure. A noter que le bouton sauvegarder produit un script bash que tu pourras ensuite lancer pour retrouver la configuration sauvegardée. Pour cela, il suffit de faire

chmod u+x wacomGUI.sh

une fois
et après avoir branché la tablette, il devrait juste suffire de lancer le script (c'est à dire double cliquer dessus)

Pour configurer les boutons, le texte à mettre c'est par exemple +ctrl z pour faire ctrl+z (voir le post 27 pour l'explication du +), et pour la souris, 1 c'est clic gauche, 2 clic du milieu, 3 clic droit.
(j'aurais bien aimé faire un truc plus facile mais j'ai pas beaucoup de temps en ce moment, je referai peut être plus tard un programme en plus propre et plus pratique, surtout à l'étape 3)
Voilà pour le petit manuel d'utilisation smile
Le code est pas super propre (quelques fonctions mal découpées, quelques variables globales) mais quand même utilisable normalement.

Tu peux commencer par tester la fonction Appliquer, et si ça marche la fonction sauvegarder (à noter que je n'ai pas de tablette pour tester mon code)

Dernière modification par Nuliel (Le 13/05/2018, à 21:17)

Hors ligne

#30 Le 04/05/2018, à 16:19

sten11

Re : Problème Installation Ximput

Merci beaucoup, je teste ça dés que je peut et je te confirme si ça marche.

Hors ligne

#31 Le 10/05/2018, à 10:49

Nuliel

Re : Problème Installation Ximput

Hello, je viens aux nouvelles pour ce petit programme smile

Hors ligne

#32 Le 10/05/2018, à 22:20

sten11

Re : Problème Installation Ximput

salut, désolé de pas avoir répondu plus tôt.

Alors je viens de tester, et les boutons marchent, le fait de bouger la souris avec le "crayon" marche, mais lorsque j'applique la mine sur le pad, ça ne fonctionne pas. Ce qui est étrange, c'est que, par accident j'ai retenté en ayant un fichier open office d'ouvert, et là ça écrit la lettre "a".

Hors ligne

#33 Le 10/05/2018, à 22:36

Nuliel

Re : Problème Installation Ximput

Pas de problème, c'était simplement pour savoir si mon petit programme est utilisable.
Alors une petite explication sur le 'a': en fait, le but de ce programme est d'éviter au maximum à l'utilisateur de passer par le terminal pour configurer la tablette. Une étape assez agaçante est de trouver les numéros associés aux boutons (du pad, du stylet et de la mine) En cliquant sur créer, le programme configure le bouton numéro 1 du pad et du stylet sur 'a', le numéro 2 sur "b", ... Avec les résultats de l'étape 2, les numéros des boutons sont calculés, et ensuite tu peux faire la configuration sans le problèmes des numéros de boutons qui se suivent pas forcément.
Mais maintenant que tu le dis, c'est vrai que c'est pas utile de configurer la mine comme un bouton. Je vais corriger ça.

Edit:
passer

for i in range(1,6):

à

for i in range(2,6):

devrait suffire
Un petit démarrage pour repartir sur une configuration oubliée, ensuite tu reconfigures la tablette avec le programme, tu sauvegardes afin d'avoir le script qui permet de configurer la tablette (ça nécessite que la tablette soit branchée)

Dernière modification par Nuliel (Le 10/05/2018, à 22:41)

Hors ligne