Seite 1 von 1

Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 12:45
von mathi
Hallo:

ich habe das Problem, dass ich einen Text mit Umlauten darstellen möchte, dies lässt aber StaticFancyText nicht zu. Ich habe jetzt nach Möglichkeiten gesucht im Hinblick darauf, dass es xml-konform sein muß - aber leider nichts gefunden:-(
Wie kann ich die Umlaute darstellen lassen??

Gruß Mathi

hier zum ausprobieren:

Code: Alles auswählen

# -*- coding: iso-8859-15 -*- 

import wx
import  wx.lib.fancytext as fa

#wx.SetDefaultPyEncoding("iso-8859-15") 

class StaticFancyText(fa.StaticFancyText):
    """StaticFancyText with SetLabel function."""

    def SetLabel(self, label):
        bmp = fa.RenderToBitmap(label,
                wx.Brush(self.GetBackgroundColour(), wx.SOLID))
        self.SetBitmap(bmp)

class ErgebnisPanel(wx.Panel): 
    def __init__(self, parent): 
        wx.Panel.__init__(self, parent,style=wx.TAB_TRAVERSAL | wx.BORDER_RAISED) 

        # Ausgabe
        Ergebnis = StaticFancyText(self, -1, ' Ergebnis: ',pos=(10,10))
        self.Ergebnis1 = StaticFancyText(self, -1, 'test1',pos=(40,40))
        self.Freeze()
        self.Ergebnis1.SetLabel('Tüüüren')
        self.Thaw()
        self.Layout()

class Test(wx.Frame): 
    
    def __init__(self, parent = None,id=-1, title = "testframe", size = wx.Size(200, 200)): 
        wx.Frame.__init__(self, parent,id, title, size = size)

        #MainPanel
        main_panel = wx.Panel(self,-1)         
        vbox = wx.BoxSizer(wx.VERTICAL) 
        main_panel.SetSizer(vbox)

        #Ergebnispanel
        self.ergebnis_panel=ErgebnisPanel(main_panel)
        vbox.Add(self.ergebnis_panel, 1, wx.EXPAND)
        self.Show()
        

def main(): 
    """Main""" 
    app = wx.App() 
    f = Test() 
    f.Center() 
    f.Show() 
    app.MainLoop() 

if __name__ == "__main__": 
    main()

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 13:54
von BlackJack
@mathi: Ich würde es mit Umlauten versuchen. Also Unicode und keine Byteketten.

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 14:16
von mathi
mit

Code: Alles auswählen

from __future__ import unicode_literals
und

Code: Alles auswählen

self.Ergebnis1 = StaticFancyText(self, -1, '\u00FC',pos=(40,40)) # ü = U+00FC
kommt folgender Fehler:
self.Ergebnis1 = StaticFancyText(self, -1, '\u00FC',pos=(40,40))
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\lib\fancytext.py", line 395, in __init__
bmp = RenderToBitmap(text, background)
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\lib\fancytext.py", line 356, in RenderToBitmap
width, height, dy = GetFullExtent(str, dc, enclose)
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\lib\fancytext.py", line 346, in GetFullExtent
RenderToRenderer(str, renderer, enclose)
File "C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\lib\fancytext.py", line 329, in RenderToRenderer
p.Parse(str, 1)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 32: ordinal not in range(128)
also falsche Codierung, wie kann ich das in der Textzeile ändern, denn
# -*- coding: iso-8859-15 -*-
sollte doch richtig sein....??

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 17:13
von ntrunk
Hi,
# -*- coding: iso-8859-15 -*-
das ist nur die Angabe für den Interpreter, welche Codierung dein Programmtext hat und hat mit deinem fancytext-Problem nichts zu tun.

Fancytext interpretiert diverse tags zur Schriftformatierung und rendert den Text dann auf ein Bitmap. Wenn du die Umlaute als XML-Entities (k.A. ob das auch offiziell so heißt) angibst, funktioniert es:

Code: Alles auswählen

self.Ergebnis1.SetLabel("Käfer")
Ob fancytext alle Unicodezeichen rendern kann, weiß ich nicht, für die Umlaute jedenfalls scheint es zu reichen :)

Gruß
Norbert

edit:
Ich sehe gerade, dass die Forensoftware das & maskiert. Hier nochmals in hoffentlich korrekter Form:
self.Ergebnis1.SetLabel("Käfer")

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 18:32
von mathi
Danke für die Hilfe,
leider schaut das dann noch nicht gut aus:
Bild

kann es sein, dass ich das richtige "coding" jeweils im string angeben muß??

Gruß Mathi


P.S.: auch

Code: Alles auswählen

str1 = u'Käfer'
str1U = str1.encode("UTF-8")
self.Ergebnis1.SetLabel(str1U)
liefert das gleiche Ergebnis....

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 19:48
von ntrunk
mathi hat geschrieben: kann es sein, dass ich das richtige "coding" jeweils im string angeben muß??
*Im* string? Wie soll das gehen? Ein string hat keine Ahnung von seiner evtl. vorhandenen Codierung.
mathi hat geschrieben: P.S.: auch

Code: Alles auswählen

str1 = u'Käfer'
str1U = str1.encode("UTF-8")
self.Ergebnis1.SetLabel(str1U)
liefert das gleiche Ergebnis....
Mach mal

Code: Alles auswählen

wx.SetDefaultPyEncoding("utf-8")
self.Ergebnis1.SetLabel(u"Käfer".encode("utf-8"))
Das führt bei mir zum gewünschten Ergebnis. Es sieht so aus, als ob fancytext nicht mit Unicode umgehen kann...
Dummerweise gibt es wohl kaum Doku zu fancytext im Netz. Eine Suche mit Google liefert lediglich eine rudimentäre Beschreibung, also bleibt da wohl nur noch ausprobieren. :?

Gruß
Norbert

Re: Umlaute in StaticFancyText

Verfasst: Montag 23. August 2010, 20:50
von Francesco
Tut zwar nichts zur Sache, aber ich hasse Unicode. Deswegen gibt es nur englische Bezeichnungen bei den Scripts, die ich so mache (und keine Übersetzungen). :)

fancytext ist ohnehin in (wx)python implementiert. Vielleicht findest du (oder ihr) eine patch, den ihr gleich Robin Dunn schicken könnt? ;)

Re: Umlaute in StaticFancyText

Verfasst: Dienstag 24. August 2010, 07:34
von mathi
Danke an alle,

Code: Alles auswählen

wx.SetDefaultPyEncoding("utf-8")
self.Ergebnis1.SetLabel("Käfer")
liefert schon das richtige Ergebnis, vorausgesetzt man setzt nicht :

Code: Alles auswählen

from __future__ import unicode_literals

Gruß Mathi

Re: Umlaute in StaticFancyText

Verfasst: Dienstag 1. März 2011, 10:46
von laggflor
mathi hat geschrieben:

Code: Alles auswählen

wx.SetDefaultPyEncoding("utf-8")
Danke hab ich auch gerade gesucht. Wieso steht das nirgends auf der wxPython Seite?

LG Florian. :D