Partage
  • Partager sur Facebook
  • Partager sur Twitter

Réception d'évènement clavier et affichage

    29 janvier 2015 à 22:15:04

    Bonsoir tout le monde, c'est encore moi avec un sujet encore différent, en ce moment j'ai pas mal de temps pour programmer, donc j'ai pas mal de questions :p

    Dans le cadre d'un programme, une sorte de t'chat, j'ai un .exe serveur et un .exe client. J'aimerais simplement ouvrir une fenêtre Tk() pour le serveur et pour le client, et quand on appuie sur les touches pour écrire, on réception l'évènement de chaque touche, et on affiche chaque touche dans la fenêtre du client et du Serveur. 

    Je ne veux pas passer par un Entry(), je veux simplement qu'à l'appui d'une touche lorsque la fenêtre est ouverte côté client et côté serveur, la lettre de la touche en question soit affichée sur les 2 fenêtres.

    J'ai pensé à faire une boucle dans une : class Clavier(Thread), j'utilise un Thread pour pouvoir faire continuer à tourner d'autres choses dans le programme. Et dans cette boucle je testerai chaque condition pour chaque touche, pour afficher la bonne lettre au moment voulu.

    Voici un extrait du code que ça me donne :

    class Clavier(Thread) :
    	def __init__(self, fen_prin, fram3_2) :
    		Thread.__init__(self)
    		self.fen_prin = fen_prin #fenêtre principale
    		self.fram3_2 = fram3_2 #un des différents
                                           #frames de ma fenêtre principale
    		global programme_ouvert 
    "juste après ma ligne ou je crée ma fenêtre principale
    j'ai créé une variable programme_ouvert = 1, que je change en 0 lorsque le programme se ferme
    pour arrêter la boucle qui va suivre."
    		
    		def toucheA(self) :
    			Label(self.fram3_2, text = "a").grid()
    			
    		while programme_ouvert == 1 :
    			fen_prin.bind("<K_a>", toucheA)
    "J'associe à l'appui sur la touche 'a' dans la fenêtre principale
    la fonction toucheA() qui affiche la lettre a dans le frame."
    
    "Mais comme vous le voyez si je dois faire ça pour chaque touche ça va être long,
    et en plus ça marche pas terrible ^^"
    "Et pour afficher aussi la lettre via le port ouvert, dans la fenêtre principale du client,
    je ne vois pas trop comment faire non plus."



    Merci d'avance pour l'aide que vous pourrez me fournir.

    -
    Edité par No_breakout 29 janvier 2015 à 22:19:01

    • Partager sur Facebook
    • Partager sur Twitter
      29 janvier 2015 à 22:18:41

      Si tu nous parles d'un client et d'un serveur, j'imagine qu'ils communiquent entre eux??? Tu veux tester que si le client envoie quelque chose au serveur, ce dernier le reçoit bien, c'est ça? Donc tu veux juste récupérer les appuis de touche dans le client, qui enverra ça au serveur. C'est ça ou j'ai rien compris?

      • Partager sur Facebook
      • Partager sur Twitter
        31 janvier 2015 à 20:09:30

        Oui je veux simplement récupérer les appuis de touche du client, et les transférer au serveur, et les afficher.
        • Partager sur Facebook
        • Partager sur Twitter
          1 février 2015 à 10:43:59

          Voici un exemple. Je n'ai fait qu'une fenêtre Tkinter pour le client. Le serveur est juste une console. A toi de le modifier pour effectuer ce que tu souhaites.

          server.py

          !/usr/bin/python3

          - coding: utf-8 -

          import socket import threading

          def handle_client(conn, addr):

          while True:
              data = conn.recv(1024)
              if not data:
                  break
              print(data.decode())
          
          print("Closing connection with {}".format(addr))
          conn.close()
          

          HOST = 'localhost' PORT = 35467

          s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) print("Server started...")

          while True:

          conn, addr = s.accept()
          print('Connected by', addr)
          t = threading.Thread(target=handle_client, args=(conn, addr))
          t.start()
          
          </pre>

          client.py

          !/usr/bin/env python3

          -- coding: utf-8 --

          import socket from tkinter import *

          HOST = 'localhost' PORT = 35467 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((HOST, PORT))

          def key(event):

          s.sendall(event.char.encode())
          

          root = Tk() frame = Frame(root) frame.pack() Label(frame, text="Appuyez sur des touches pour les envoyer au serveur...").pack(padx=30, pady=30)

          root.bind("<Key>", key)

          root.mainloop()

          </pre>

          -
          Edité par Dan737 1 février 2015 à 10:45:39

          • Partager sur Facebook
          • Partager sur Twitter

          Réception d'évènement clavier et affichage

          × 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