Partage
  • Partager sur Facebook
  • Partager sur Twitter

encodage touche 'échap' dans py serial

    2 août 2021 à 15:13:16

    Bonjour, 

    J'ai pour projet un petit programme me permettant de dialogué avec une centrale d'alarme via un port série.

    J'utilise pour cela la bibliothèque pySerial.

    J'arrive a avancer dans les menu mais impossible de revenir en arrière (ce qui dans l'hyperterminal ce fait via la touche echap). J'imagine que il faut que j'encode la touche echap mais je n'y arrive pas. J'ai tenté de capturer les touche clavier de les encoder et de les envoyer (dans un autre code que celui ci dessous) mais le résultat est le même.

    Si quelqu'un a la gentillesse de m'aider, ou une idée de piste a creuser, il aura ma total gratitude .

    import serial
    import serial.tools.list_ports
    from tkinter import *
    
    root = Tk()#creer la fenetre
    
    def nouvelleFenetre ():
        for widget in root.winfo_children() : #supprime les widgets de la fenetre
            widget.destroy()
    
    def ouvertureConnection ():
        nouvelleFenetre()
        global port_dispo
        port_dispo = serial.tools.list_ports.comports(include_links=False) #creer une liste avec tout les ports disponible
        if (len(port_dispo) != 0): # on a trouvé au moins un port actif
            print(port_dispo[0].device) #affiche le nom du premier port com de la liste dans la console
            Label(root, text='port n° '+ port_dispo[0].device+' conecté').pack()#affiche la connection du port com sur interface graphique
            global textAenvoyer
            textAenvoyer=Entry(root) #entre text a envoyé
            textAenvoyer.pack()
            Button(root, text='envoi', command=envoieDonne).pack()
        else :
            print('aucun port com ouvert !') #affiche message d'ereur dans la console 
            Label(root, text='Aucun port detecté').pack() #affiche message d'erreur sur interface
        Button(root, text='Fermer', command=root.destroy).pack()#boutton fermeture fenetre
        Button(root, text='actualiser', command=ouvertureConnection).pack()#bouton actualiser connection
    
    def envoieDonne ():
        ser = serial.Serial(port_dispo[0].device, baudrate=9600, timeout=1, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None, exclusive=None)  # ouvre le port com
        print(ser.name)         # verifie si le bon port com est ouvert
        text = textAenvoyer.get() #recupere le text saisie
        print(text) #l'affiche dans la console
        ser.write(text.encode('latin-1'))  # envoie le texte
        texteRecu = ser.read(500) #lit 500 octet ou moin si timeout depassé 
        print (texteRecu.decode('latin-1')) #affiche le resultat dans la console
        ser.close()             # ferme le port
    
    ouvertureConnection()
    root.mainloop()#boucle de la fenetre



    • Partager sur Facebook
    • Partager sur Twitter
      2 août 2021 à 19:09:27

      Entry ne récupère que les caractères imprimable. Si on veut saisir Escape, il faut le faire explictement:

      import tkinter as tk
      
      root = tk.Tk()
      entry = tk.Entry(root)
      entry.pack()
      entry.bind('<Escape>', lambda e: entry.insert('end', '\x1b'))
      tk.Button(root, text='show', command = lambda: print(repr(entry.get()))).pack()
      
      tk.mainloop()
      • Partager sur Facebook
      • Partager sur Twitter

      encodage touche 'échap' dans py serial

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown