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()