Bonjour,
Je suis nouveau dans ce forum ET en Python. J'ai lu les 32 premières pages du forum pour trouver ma réponse, sans succès.
Voilà mon problème :
Dans le cadre d'un petit jeu avec client/serveur, je veux que mon client réagisse à l'arrivée d'un message du serveur.
Lorsque j'utilise mon recv(), la mainloop se bloque (évidemment).
Comment créer une fonction callback qui se lancerait en réaction à mon event du type "un message du serveur est en attente de lecture" ?
Je vous joins un version minimisée de mon code :
Elle contient un simple bouton, qui a pour fonction de :
- executer des trucs
- désactiver le bouton (le temps que l'adversaire joue)
- capter la réponse du serveur (sans bloquer tkinter)
- réactiver le bouton pour que le joueur puisse à nouveau jouer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
38 import socketfrom tkinter import * def nord(): def wrapper(): boutonNord.config(state = "disabled") connexion_avec_serveur.recv(1) boutonNord.config(state = "normal") return wrapper hote = "localhost" port = 12800 connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM) while 1: try: connexion_avec_serveur.connect((hote, port)) break except socket.error: print("J'y arrive pô !!") print("Connexion établie avec le serveur sur le port {}".format(port)) fJeu = Tk() boutonNord = Button(fJeu, state = "normal", relief = "raised", width = 3, height = 2, text = "N", command = nord()) boutonNord.grid(row = 0, column = 0) fJeu.mainloop()
Partager