tkinter/python 2.4.2 verliert sporadisch Kontakt zur GUI
@egerlach: Mal davon abgesehen, dass man `threading` statt `thread` verwenden sollte, darf man nicht von verschiedenen Threads aus auf die GUI zugreifen. Da können die interessantesten Probleme auftauchen.
Lösung: wenn Umlaute oder sz eingegeben wurden als Nachrichtentext, dann
kam die schon hinreichend bekannte Fehlermeldung:
'ascii' codec can't encode character u'\xfc' in position 41
Da ich die Fehlermeldungen nirgendwo angefangen hatte (schlecht programmiert von mir) sah es so aus, als hätte die GUI den Kontakt zum Programmcode verloren.
Habe mich ausführlichen mit UTF und latin und ... und beschäftigt, da ich eigentlich keine Textverarbeitung mit python mache, sondern eingegebenen Text direkt in eine Datei schreibe, convertiere ich erst gar nicht erst in unicode sondern schreibe den Text direkt mit print heraus, was von einem bash-Skript dann entgegen genommen wird, in den iso-8859-Zeichensatz:
Jetzt läufts wie geschmiert 
Eckard
kam die schon hinreichend bekannte Fehlermeldung:
'ascii' codec can't encode character u'\xfc' in position 41
Da ich die Fehlermeldungen nirgendwo angefangen hatte (schlecht programmiert von mir) sah es so aus, als hätte die GUI den Kontakt zum Programmcode verloren.
Habe mich ausführlichen mit UTF und latin und ... und beschäftigt, da ich eigentlich keine Textverarbeitung mit python mache, sondern eingegebenen Text direkt in eine Datei schreibe, convertiere ich erst gar nicht erst in unicode sondern schreibe den Text direkt mit print heraus, was von einem bash-Skript dann entgegen genommen wird, in den iso-8859-Zeichensatz:
Code: Alles auswählen
print str(listeNachr).encode('iso-8859-1') + freierText.get().encode('iso-8859-1')

Eckard
@egerlach: Das wird wahrscheinlich so lange wie geschmiert laufen, bis jemand etwas eingibt, was sich nicht in 'iso-8859-1' kodieren lässt. 

@egerlach Zumindest bei dir würde dein Code schon bei mir versagen weil meine Shell UTF-8 nutzt, sehr ungewöhnlich dürfte dass auch nicht sein. Mal abgesehen davon dass str() (unter 2.x) den Code nach 'ascii' enkodiert.
Besser wäre du nutzt sys.stdout.encoding(wenn vorhanden) für die Ausgabe und sys.stdin.encoding(wenn vorhanden) für die Dekodierung des eingegebenen Textes von der Konsole, bei GUIs sollte unicode zurückkommen. Sollte das encoding der Standardausgabe nicht ermittelbar sein kann man immer noch auf sys.getdefaultencoding() zurückfallen, mit 'replace' um Fehler zu behandeln.
Besser wäre du nutzt sys.stdout.encoding(wenn vorhanden) für die Ausgabe und sys.stdin.encoding(wenn vorhanden) für die Dekodierung des eingegebenen Textes von der Konsole, bei GUIs sollte unicode zurückkommen. Sollte das encoding der Standardausgabe nicht ermittelbar sein kann man immer noch auf sys.getdefaultencoding() zurückfallen, mit 'replace' um Fehler zu behandeln.
ich hab so gut wie keine Ahnung von Tkinter, aber von wx.Pythonegerlach hat geschrieben:hier der Code, den ich eingesetzt habe, einfach die Farbe alle 5 Sek ändern.Code: Alles auswählen
def wechsele_hintergrFarbe(t): while True: t.config(background="#eeeee6") time.sleep(5) t.config(background="#e6eade") time.sleep(5) thread.start_new_thread(wechsele_hintergrFarbe,(root,))
In wxPython schaut das so aus:
Code: Alles auswählen
self.timer = wx.Timer(self)
self.timer.Start(5000) # 5000ms
self.Bind(wx.EVT_TIMER, self.on_refresh_bgcolor)
def on_refresh_bgcolor(self, event):
# Alle 5 Sekunden wird diese Funktion aufgerufen
pass
Code: Alles auswählen
root.after(5000, wechsele_hintergrFarbe)
the more they change the more they stay the same