Ich habe folgendes Problem:
Ich habe in Python mit Hilfe von Sockets ein einfachen Netzwerknachrichtendienst als GUI programmiert.
Dazu benutze ich drei Klassen:
den Empfänger, welcher die eingehenden Nachrichten empfängt und an die Hauptklasse weitergibt.
Die Hauptklasse erzeugt für jeden Chat ein Object aus der Klasse Chats und übergibt die Nachrichten, welche von dem Empfänger(Objekt) kommen, an das jeweile Chatfenster(Objekt von Klasse Chats).
Den Empfänger habe ich in einen neuen Thread gesteckt damit dieser ungestört empfangen kann. Jedoch gibt es beim übergeben von Empfänger zu dem Objekt der Klasse Hauptklasse einen Fehler.
Fehler:
RuntimeError: main thread is not in main loop
"main": Objekt der Hauptklasse
Was mache ich falsch?
Python 3.5 Threading
@Donar3103: main-thread ist der Thread der erzeugt wird, wenn das Programm gestartet wird. GUIs dürfen immer nur von diesem Thread aus verändert werden, normalerweise im Rahmen der Event-Verarbeitung, die vom main-loop des GUI-Rahmenwerks gesteuert wird.
@Donar3103: Das kommt auf das GUI-Rahmenwerk an, ob und wenn ja welche Möglichkeiten es bietet um Informationen threadsicher zum Hauptthread in die GUI zu bringen.
@Donar3103: In diesem Fall ist `tkinter` genau mit GUI-Rahmenwerk gemeint. Gibt ja auch noch andere.
Bei Tk ist die übliche Lösung andere Threads Informationen in eine `Queue.Queue` stecken zu lassen, die der GUI-Thread regelmässig abfragt. Dazu kann man die `after()`-Methode auf Widgets verwenden.
Bei Tk ist die übliche Lösung andere Threads Informationen in eine `Queue.Queue` stecken zu lassen, die der GUI-Thread regelmässig abfragt. Dazu kann man die `after()`-Methode auf Widgets verwenden.