Kein Schreibzugriff auf plainTextEdit

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
hulkster
User
Beiträge: 3
Registriert: Donnerstag 12. April 2012, 09:01

Hallo,

ich bin relativ neu in Python und habe gerade ein Problem bei dem ich einfach nicht weiter komme.
Ich versuche den Text eines plainTextEdits unter PyQt4 zu setzen. Leider funktioniert das nicht wenn ich das in einem Thread mache.

Hier ist mal der Code um den es geht: http://pastebin.com/CAy8EgEH

Es geht um die Funktion log_status_code. Setze ich den Text direkt (Zeile 7) oder rufe ich die Funktion in der init Funktion auf (Zeile 8), geht alles. Aber im neuen Thread (Zeile 36,37) stürzt das Programm einfach ab. Ohne Fehlermeldung seitens Python. Ich nehme mal an da gibts irgend ne Speicherverletzung. Zeile 38 hingegen, auslesen des Textes, geht.

Kann mir jemand sagen warum das nicht geht?
Ich starte in diesem Thread der die Funktion bb_main_function aufruft z.B. einen weiteren Thread welcher die Function set Progbar aufruft (thread.start_new_thread( self.setProgbar, (duration,)) )
Hier läuft alles ohne Probleme.

Danke schonmal im voraus
lunar

Auf Steuerelemente, sprich alle von "QWidget" abgeleiteten Klassen, darf man nur und ausschließlich aus dem Thread zugreifen, in welchem das "QApplication"-Objekt erstellt wurde ("Hauptthread"). Andere Threads dürfen unter keinen Umständen direkt auf Steuerelemente zugreifen, sondern müssen den Hauptthread benachrichtigen, und dieser muss dann die Änderungen durchführen. Qt bietet dafür den Signal-Slot-Mechanismus. Um diesen verwenden zu können, musst Du Deinen Thread allerdings mithilfe von "QThread" implementieren (Beispiel).

Das alles steht im Übrigen auch in der Qt-Dokumentation…
hulkster
User
Beiträge: 3
Registriert: Donnerstag 12. April 2012, 09:01

Danke für die schnelle Antwort mit QThread klappt es wie es soll.
Antworten