Hi,
also ich hab da ein Problem mit Tkinter. Ich habe eine Oberfläche, welche Eingaben aus einem Entry verarbeiten soll und dann wieder ein Ergebnis ausgibt. Das blöde dabei ist aber, sobald man Umlaute eingibt ist das ganze kein str mehr sondern Unicode, mein Programm kann aber nur vernünftig mit Objekten vom Typ string arbeiten.
Wenn ich in dem Programm manuell einer Variable z.B.: "Frühling" zuweise, ist das ja auch nur ein string, und er kann es wunderbar verarbeiten, aber sobald in dem Entry was mit Umlauten eingetragen wird macht er ein Objekt vom Typ Unicode draus.
Gibt es irgendeine Möglichkeit, dass er das als String ausgibt, oder wenigstens vollständig wieder in einen String umformt?
zu der Umformung hab ich zwar schon was gefunden, da kommt dann aber sowas raus:
Fr\xfchling
statt Frühling, und damit kann ich nichts anfangen.
Ich hoffe hier kann mir jemand bei meinem Problem helfen, ich durchsuch schon seit Stunden google und finde einfach nichts was mir bei menem Problem hilft.
Entry und Unicode
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Hallo daniels7 und willkommen hier im Forum!
Wenn ich mich recht entsinne, müsste für Dein Problem eigentlich die Angabe des "encoding cookie" ausreichen.
Für Windows-Maschinen wäre das
in der ersten oder zweiten Zeile Deines Scriptes.
Ansonsten ist auch die Anwendung von sogenannten U-Strings empfehlenswert:
Zum Thema Unicode kann ich Dir das Von Python, Umlauten, Unicode und Encodings empfehlen.
Es ist immer ganz hilfreich für die Experten hier, wenn ein bischen Code Deinerseits für das Problem aufgezeigt wird. Dann kann das jeder ausprobieren und auch nachvollziehen. Nur so als Hinweis.
Gruss Andy
Wenn ich mich recht entsinne, müsste für Dein Problem eigentlich die Angabe des "encoding cookie" ausreichen.
Für Windows-Maschinen wäre das
Code: Alles auswählen
# -*- coding: cp1252 -*-
Ansonsten ist auch die Anwendung von sogenannten U-Strings empfehlenswert:
Code: Alles auswählen
u"Ich bin ein String"
Es ist immer ganz hilfreich für die Experten hier, wenn ein bischen Code Deinerseits für das Problem aufgezeigt wird. Dann kann das jeder ausprobieren und auch nachvollziehen. Nur so als Hinweis.
Gruss Andy
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, erstens wirkt sich das Encoding-Cookie nur auf u"..."-Markierte Strings aus und zweitens ist es wesentlich besser seine Dateien auf jeder Platform mit UTF-8 zu kodieren.Andy hat geschrieben:Wenn ich mich recht entsinne, müsste für Dein Problem eigentlich die Angabe des "encoding cookie" ausreichen.
Für Windows-Maschinen wäre dasin der ersten oder zweiten Zeile Deines Scriptes.Code: Alles auswählen
# -*- coding: cp1252 -*-
Ich kann dir sogar die verbesserte Fassung, [wiki]Von Umlauten, Unicode und Encodings[/wiki] empfehlen.Andy hat geschrieben:Zum Thema Unicode kann ich Dir das Von Python, Umlauten, Unicode und Encodings empfehlen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Das encoding Cookie ist bei mir schon vorhanden. und die Strings mit u markieren kann ich auch nicht, da das Programm ja die ganze Zeit nur Variablen verarbeitet und keine expliziten Strings, da wüsste ich nicht, wie ich so ein u mit einer Variable kombinieren soll. Den empfohlenen Artikel habe ich schon gelesen, und er konnte mir nicht wirklich bei meinem Problem behilflich sein.
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Hier habe ich beim printen das encoding angegeben:daniels7 hat geschrieben:Das encoding Cookie ist bei mir schon vorhanden. und die Strings mit u markieren kann ich auch nicht, da das Programm ja die ganze Zeit nur Variablen verarbeitet und keine expliziten Strings, da wüsste ich nicht, wie ich so ein u mit einer Variable kombinieren soll. Den empfohlenen Artikel habe ich schon gelesen, und er konnte mir nicht wirklich bei meinem Problem behilflich sein.
Code: Alles auswählen
# -*- coding: iso-8859-1 -*-
import Tkinter as Tk
class Hauptfenster(Tk.Frame):
def __init__(self, master):
Tk.Frame.__init__(self, master)
self.pack(expand='yes', fill='both')
self.string=Tk.StringVar()
self.entry=Tk.Entry(self,textvariable=self.string,width=40)
self.entry.grid(column=1,row=1,sticky='w')
self.but = Tk.Button(self, bg='orange', text="Drücken",
border="2",relief='groove',
width=20, height=2,
command=self.ausgabe)
self.but.grid(column=1,row=3,sticky='w')
def ausgabe(self):
variable = self.entry.get()
print variable.encode("iso-8859-1")
def _main():
root = Tk.Tk()
app = Hauptfenster(root)
root.mainloop()
if __name__=='__main__':
_main()
Leonidas ich gebe Dir ja so recht. Aber ich hab´s schnell in der IDLE runtergeschrieben. Da gehts auch ohne u"..."-Strings! Aber wir wissen ja alle, das IDLE nichts für uns ist. Wieder drauß gelernt.Leonidas hat geschrieben:Nein, erstens wirkt sich das Encoding-Cookie nur auf u"..."-Markierte Strings aus und zweitens ist es wesentlich besser seine Dateien auf jeder Platform mit UTF-8 zu kodieren.
Aber wenn ich jetzt wieder total am Thema vorbei war, verbesser mich bitte.
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Wobei man so natürlich auch bestimmen kann, wie man denn den String gern aus einer Variable hätte. - Nämlich mit u"..."-String:
Code: Alles auswählen
def ausgabe(self):
variable = self.entry.get()
# Label für die Ausgabe
self.lb = Tk.Label(self, text = u'Ausgabe: ' + variable)
self.lb.grid(column=1,row=4,sticky='w')
-
- User
- Beiträge: 196
- Registriert: Sonntag 1. Januar 2006, 20:12
- Wohnort: aus dem hohen Norden....
Zur Verdeutlichung:BlackJack hat geschrieben:Naja, man könnte aber auch einfach `unicode()` verwenden.
Code: Alles auswählen
# Label für die Ausgabe
self.lb = Tk.Label(self, text = unicode(variable))
self.lb.grid(column=1,row=4,sticky='w')
so, euer Code hat funktioniert, danke dafür
Jetzt zu meiner nächsten Frage:
Gibt es irgendeine Möglichkeit innerhalb eines Strings einen Befehl für einen Absatz innerhalb des Textwidgets zu geben?
\n funktioniert irgendwie nicht und wird immer angezeigt, was die Ausgabe stört.
Jetzt zu meiner nächsten Frage:
Gibt es irgendeine Möglichkeit innerhalb eines Strings einen Befehl für einen Absatz innerhalb des Textwidgets zu geben?
\n funktioniert irgendwie nicht und wird immer angezeigt, was die Ausgabe stört.
Dann machst Du irgend etwas falsch:
Code: Alles auswählen
import Tkinter as tk
root = tk.Tk()
text = tk.Text(root)
text.pack()
text.insert(tk.END, 'foo\nbar')
root.mainloop()
so, hab den Fehler gefunden.
Jetzt zu meiner nächsten frage:
Kann man eine Rekursion die läuft mit irgendeinem Befehl vollständig in ihrem Durchlauf abbrechen?
Das merkwürdige ist nämlich, dass in meinem Programm wenn ich an einer bestimmten Stelle in der Rekursion nen Fehler einbaue alles hervorragend funktioniert, aber sobald ich da einfach nix hinschreibe oder return, etc. läuft das Programm weiter und macht viel mehr als es soll. Der Fehler müsste ja theoretisch bewirken das das Programm an der Stelle abbricht.
Jetzt zu meiner nächsten frage:
Kann man eine Rekursion die läuft mit irgendeinem Befehl vollständig in ihrem Durchlauf abbrechen?
Das merkwürdige ist nämlich, dass in meinem Programm wenn ich an einer bestimmten Stelle in der Rekursion nen Fehler einbaue alles hervorragend funktioniert, aber sobald ich da einfach nix hinschreibe oder return, etc. läuft das Programm weiter und macht viel mehr als es soll. Der Fehler müsste ja theoretisch bewirken das das Programm an der Stelle abbricht.
Aus verschachtelten Funktionsaufrufen kann man mit Ausnahmen heraus kommen. Ist eventuell nicht die sauberste Lösung. Ohne weitere Informationen kann man dazu aber nicht viel sagen.
Dafür solltest Du aber ein neues Thema eröffnen. Das ist auch nicht mehr `Tkinter`-spezifisch.
Dafür solltest Du aber ein neues Thema eröffnen. Das ist auch nicht mehr `Tkinter`-spezifisch.