Hi Francesco!Francesco hat geschrieben:Überall ein u vorsetzten u"String". Oder muss ich das eh nicht?
Das "u" ist nur dann wichtig, wenn der Text Umlaute enthält. Sonst kannst du es weg lassen, da wxPython nur dann meckert, wenn der Text nicht umgewandelt werden kann.
Übergebe ich an wxPython einen normalen String, dann wandelt wxPython (Unicode) den String automatisch intern nach Unicode um. Somit kümmert sich wxPython um die korrekte Umwandlung. Vorausgesetzt, das Coding des Moduls, das im Kopf angegebene Coding und das an wxPython per ``wx.SetDefaultPyEncoding`` übermittelte Coding stimmen überein.
Übergebe ich an wxPython (Unicode) einen Unicode-String, dann braucht wxPython nichts mehr umwandeln. Python kümmert sich um die Umwandlung (richtiges Encoding im Kopf des Moduls ist Voraussetzung, dass Python u"Strings" korrekt umwandeln kann).
wxPython (Unicode) hält sich an diese Aussagen:
- Gib mir Unicode und ich zeige den Text korrekt an.
- Ich gebe dir Unicode zurück. So weißt du immer, was du von mir zu erwarten hast.
Du kannst ja auch auf Nummer-Sicher gehen.
In diesem Beispiel habe ich den ``encodinghelper`` eingebunden, dass Ausgaben an STDOUT automatisch umgewandelt werden. Dann habe ich mit ``wx.SetDefaultPyEncoding("iso-8859-1")`` wxPython mitgeteilt, dass Strings, die nicht Unicode sind, in diesem Coding vorliegen.
Code: Alles auswählen
#!/usr/bin/env python -O
# -*- coding: iso-8859-1 -*-
import wx
import encodinghelper
wx.SetDefaultPyEncoding("iso-8859-1")
app = wx.PySimpleApp()
f = wx.Frame(None)
vbox = wx.BoxSizer(wx.VERTICAL)
f.SetSizer(vbox)
lab1 = wx.StaticText(f, -1, u"Über den Wolken")
vbox.Add(lab1)
print repr(lab1.GetLabel()), type(lab1.GetLabel())
lab2 = wx.StaticText(f, -1, "Über den Wolken")
vbox.Add(lab2)
print repr(lab2.GetLabel()), type(lab2.GetLabel())
f.Show()
app.MainLoop()
Gerold