umlaute speichern

Fragen zu Tkinter.
Antworten
rogen

Samstag 7. Februar 2004, 11:29

ich habe ein kleines script:

Code: Alles auswählen

from Tkinter import *
import tkFileDialog

class Editor:
    def __init__ (self):
        fenster = Tk()
        self.text = Text(fenster)
        self.text.pack()
        dateim = Menu(fenster)
        dateim.add_command(label="speicher", command =  self.speicher)
        fenster.config(menu=dateim)
        mainloop()
        
    def speicher(self):
        self.datei = tkFileDialog.asksaveasfile()
        if self.datei:
            self.datei.write(self.text.get(1.0,END))
        

editor = Editor()
leider kann ich keine umlaute speichern
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Samstag 7. Februar 2004, 12:09

Das muss ein Fehler in Tcl/TK sein, Python hat damit nix zu tun. Scheinbar kann kein UNicode zurückgesendet werden (bei get), denn wenn ich von Python aus Umlaute einfüge, kann ich die auch speichern (self.text.insert(END,"\xdc")). Es empfiehlt sich also, mal eine aktuellere version zu installieren (von Tcl/TK). Aber du hast noch einen anderen Fehler in deinem Programm:

ich habe erst einmal gerätselt, warum bei mir gar nichts gespeichert wurde, aber eine Datei da war. Als ich dein Script dann zu gemacht habe, hat er gespeichert --> du vergisst die Datei wieder zu schließen. Alternativ kannst du das ja auch wirklich weglassen, darfst aber nicht das file-Obj speichern, es wird eh beim nächsten speichern-Dialog überschrieben.

Code: Alles auswählen

    def speicher(self): 
        datei = tkFileDialog.asksaveasfile() 
        if datei: 
            datei.write(self.text.get(1.0,END))
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Samstag 7. Februar 2004, 13:41

Milan hat geschrieben:Scheinbar kann kein UNicode zurückgesendet werden (bei get), denn wenn ich von Python aus Umlaute einfüge, kann ich die auch speichern
Kann es sein dass Python mit UTF8 arbeitet während das Betriebssystem standardmäßig ISO 8859-15 verwendet?

Ich hatte ähnliche Probleme bei Verwendung von QT. Vor Verwendung des Strings muss ich diesen konvertieren, dann geht's.

Hans
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Samstag 7. Februar 2004, 22:28

konvertieren??

ich hatte mal ein ähnliches problem (und habs immer noch):
ich kann keine umlaute suchen.
rogen

Sonntag 8. Februar 2004, 09:55

das löst zwar das problem, ist aber nicht schön

Code: Alles auswählen

from Tkinter import *
import tkFileDialog

def sonderzeichen(eing):
    a = repr(eing)
    a = a.replace("\\xe4","ä")
    a = a.replace("\\xfc","ü")
    a = a.replace("\\xf6","ö")
    a = a.replace("\\xd6","Ö")
    a = a.replace("\\xc4","Ä")
    a = a.replace("\\xdc","Ü")
    a = a[1:]
    a = a.replace("\'","")      
    a = str(a)
    return a  

class Editor:
    def __init__ (self):
        fenster = Tk()
        self.text = Text(fenster)
        self.text.pack()
        dateim = Menu(fenster)
        dateim.add_command(label="speicher", command =  self.speicher)
        dateim.add_command(label="offnen", command =  self.laden)
        
        fenster.config(menu=dateim)
        mainloop()
        
    def speicher(self):
        self.datei = tkFileDialog.asksaveasfile()
        if self.datei:
            print sonderzeichen(self.text.get(1.0,END))
            print "---------------"
            print (self.text.get(1.0,END))
            self.datei.write(sonderzeichen(self.text.get(1.0,END)))
    def laden(self):
        self.datei = tkFileDialog.askopenfile()
        self.text.delete(1.0, END)
        if self.datei:
            zeilen = self.datei.read().split("\\n")
            print zeilen
            print len(zeilen)
            for a in zeilen:
                self.text.insert(END,a + "\n")
            
        
        
editor = Editor()[quote]

[/quote]
rogen

Sonntag 8. Februar 2004, 09:55

aber zum suchen würde das helfen.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Sonntag 8. Februar 2004, 10:33

würde denn nicht auch:

Code: Alles auswählen

import sys
sys.getdefaultcoding(Unicode)  #ja...welches encodin nun???? :? 
reichen?
aber welches encoding müsste man setzen? geht auch ASCII? (kenn ich besser aus delphi)
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Sonntag 8. Februar 2004, 11:36

Hi rogen, hab mir mal einen alten Thread rausgesucht. http://python.sandtner.net/viewtopic.ph ... ight=88591 man achte am Ende auf die QT Lösung QString.local8bit !

Vielleicht gibt es soetwas ja auch in TKInter

Hans
Antworten