C'est mon premier message, donc si je fais quelque chose de mal, soyez patient.
Je travaille sur un programme de chat très simple écrit en python avec une interface gtk, un utilisateur a le serveur et l'autre a le client. Tout fonctionne, sauf que je ne peux pas envoyer ou recevoir de messages (bien que la connexion soit établie). J'ai déjà cherché une solution sur le forum mais je n'ai rien trouvé.
(partie) le code de l'interface graphique est:
Gdk-ERROR en mode Python avec Multithreading
gi.require_version ('Gtk', '3.0')
from gi.repository import Gtk, Gdk, GObject, GLib
class GUI:
def __init__ (self, is_server):
GObject.threads_init()
[...]
self.buffer1 = Gtk.TextBuffer()
self.text_box = Gtk.TextView (buffer=self.buffer1)
self.text_box.set_editable (False)
[...]
self.th = threading.Thread (target = self.receive)
self.th.daemon = True
self.th.start()
Gtk.main()
def receive (self):
while (True):
try:
msg = self.socket.receive_message()
if (msg != ""): self.insert_text (msg)
except: pass
def insert_text (self, text):
self.text_box.set_editable (True)
end_iter = self.buffer1.get_end_iter()
try: self.buffer1.insert (end_iter, text + "\n")
except: pass
self.text_box.set_editable (False)
adj = self.scr.get_vadjustment()
adj.set_value (adj.get_upper())
Et Client.py ou Server.py (sont les mêmes lignes):
class Client/Server:
[...]
def receive_message (self):
try:
msg0 = self.conn.recv (1024)
msg = msg0.decode ("utf-8")
return msg
except: pass
L'erreur que je reçois est:
(Chat.py:61330): Gdk-ERROR **: The program 'Chat.py' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadRequest (invalid request code or no such operation)'.
(Details: rerial 892 error_code 1 request_code 0 (core protocol) minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the GDK_SYNCHRONIZE environment
variable to change this behavior. You can get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)
Trace/BPT trap (code dumped)
Je pense qu'il est une erreur multithreading car dans le second fil que j'essaie de changer le texte du Gtk.TextView mais je ne suis pas sûr (je suis tout à fait nouveau avec mul tithreading).
Merci à tous.
Ça marche, merci beaucoup. – Momolo