Bonjour,
Je cogite sur un service de tchat pour une assoc, j'ai choisi Simplechat https://github.com/KetanSingh11/SimpleChatApp , et comme je ne suis pas très bon en Python, je bloque sur le moment où je voudrais stocker les messages échangés sur le Tchat, dans un ficher txt

Le code du script :

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
 
 
""" Script for Tkinter GUI chat client. """
# Based on https://github.com/KetanSingh11/SimpleChatApp
 
import tkinter
from socket import AF_INET, socket, SOCK_STREAM, IPPROTO_TCP, TCP_NODELAY
from threading import Thread
 
 
def receive():
    """ Handles receiving of messages. """
    while True:
        try:
            msg = sock.recv(BUFSIZ).decode("utf8")
            if not msg:
                print("Received empty data - closing connection\n")
                break
            msg_list.insert(tkinter.END, msg)
            print("Received: ", msg)
        except Exception as e:  # Possibly client has left the chat.
            print("receive error\n", e)
            break
 
def send(event=None):
    """ Handles sending of messages. """
    msg = my_msg.get()
    my_msg.set("")  # Clears input field.
    msg += "\n"
    sock.send(bytes(msg, "utf8"))
 
def on_closing(event=None):
    """ This function is to be called when the window is closed. """
    sock.close()
    top.quit()
 
top = tkinter.Tk()
top.title("Simple Chat Client v1.0")
messages_frame = tkinter.Frame(top)
 
my_msg = tkinter.StringVar()  # For the messages to be sent.
my_msg.set("")
scrollbar = tkinter.Scrollbar(messages_frame)  # To navigate through past messages.
msg_list = tkinter.Listbox(messages_frame, height=15, width=70, yscrollcommand=scrollbar.set)
scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
msg_list.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
msg_list.pack()
 
messages_frame.pack()
 
button_label = tkinter.Label(top, text="Enter Message:")
button_label.pack()
entry_field = tkinter.Entry(top, textvariable=my_msg, foreground="Red")
entry_field.bind("<Return>", send)
entry_field.pack()
send_button = tkinter.Button(top, text="Send", command=send)
send_button.pack()
 
quit_button = tkinter.Button(top, text="Quit", command=on_closing)
quit_button.pack()
 
top.protocol("WM_DELETE_WINDOW", on_closing)
 
HOST = "127.0.0.1"
PORT = 8878
BUFSIZ = 1024
ADDR = (HOST, PORT)
sock = socket(AF_INET, SOCK_STREAM)
sock.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
sock.connect(ADDR)
 
receive_thread = Thread(target=receive)
receive_thread.start()
tkinter.mainloop()  # Starts GUI execution.
Et ce que j'ai rajouté (#modif) dans def receive, mais lorsque je lance le script, il n'y a que le dernier message qui est écrit dans le TXT :

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
 
 
def receive():
    """ Handles receiving of messages. """
    while True:
        try:
            msg = sock.recv(BUFSIZ).decode("utf8")
            if not msg:
                print("Received empty data - closing connection\n")
                break
            msg_list.insert(tkinter.END, msg)
            print("Received: ", msg)
            with open('C:\\Users\\test-script.txt', mode='w') as file_object:   # modif
             print(msg, file=file_object)                                                       # modif
        except Exception as e:  # Possibly client has left the chat.
            print("receive error\n", e)
            break
j'ai du loupé quelque chose si vous aviez une idée pour m'aider à avancer merci !
Nico