Unicode-Text auf Widget schreiben geht nicht richtig

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Nichiren
User
Beiträge: 2
Registriert: Samstag 15. August 2009, 21:47

Hallo miteinander!

Ich wollte ein SuperKaramba-Widget an meine Wünsche anpassen. Leider habe ich herzlich wenig Ahnung von Python, nur etwas C-Kentnisse.

So bin ich auch schon bald auf das erste Problem gestoßen - Unicode-Text auf das Widget schreiben klappt nicht richtig.

Die Python-Datei ist in der ersten Zeile richtig deklariert:

Code: Alles auswählen

# -*- coding: utf-8 -*-
Um Text auf das Widget zu schreiben, benutze ich folgenden Befehl:

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, 'aou')
Ascii funktioniert einwandfrei, aber bei Sonderzeichen (wie Umlauten) oder japanischem Unicode-Text schreibt er nur stattdessen nur Zeichenmüll aufs Widget.

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, 'aäoöuü')
-> a, o und u erscheinen normal, aber statt der Umlaute erhalte ich nur Zeichenmüll.

Ich bin dann auf das Forum hier gestoßen und über die Forensuche hier auf das Python Unicode Howto:
http://docs.python.org/howto/unicode.html

Daraufhin habe ich ein paar Sachen ausprobiert:

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, u'aäoöuü')
-> hier schreibt er 'aä' aufs Widget, Umlaut funktioniert also, aber den Rest schmeißt er sonderbarerweise weg

Code: Alles auswählen

Wtext=u'aäoöuü'
Wtext.encode('utf-8')
Text1=karamba.createText(widget, x, y, w, h, Wtext)
-> das gleiche hier, er schreibt 'aä' aufs Widget und schmeißt den Rest weg

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, unicode('aäoöuü').encode('utf-8'))
-> das funktioniert gar nicht, hier hängt das Widget an der Stelle, an der er den Text drauf schreiben sollte

Ich wüßte nicht, was ich sonst noch probieren sollte...

Die Deklarierung der 'createText'-Funktion, falls ihr die braucht:
http://api.kde.org/4.2-api/kdeutils-api ... f2c87d15cd

Code: Alles auswählen

QObject * KarambaInterface::createText 	(	Karamba * 	k, 
		int 	x, 
		int 	y, 
		int 	width, 
		int 	height, 
		const QString & 	text = ""	 
	)
Da mir QString nichts sagt, habe ich das auch nachgeschlagen:
http://doc.trolltech.com/4.4/qstring.html
The QString class provides a Unicode character string.
Also das unterstützt Unicode...
woran liegt es dann, daß er Unicode-Text nicht richtig aufs Widget schreiben will?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wieso übergibst Du denn dann keinen QString? Vielleicht reicht das schon.

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, QString(u'aäoöuü'))
Du solltest Dir noch einmal das Unicode-Howto durchlesen. Durch ein .encode() wandelst Du Unicoe ja wieder in eine Byte-Codierung um. Das kann also nicht die Lösung sein.

Speicherst Du Dein Script auch wirklich im UTF-8 Format?

Und es gibt ein extra Qt-Forum hier im Board - da passt Dein Thread besser rein. (Zumal Du nicht wirklich explizit erwähnst, dass es sich um ein PyQt-Problem handelt. Es gibt für Python durchaus auch andere GUI-Libs)
Nichiren
User
Beiträge: 2
Registriert: Samstag 15. August 2009, 21:47

Hyperion hat geschrieben:Wieso übergibst Du denn dann keinen QString? Vielleicht reicht das schon.

Code: Alles auswählen

Text1=karamba.createText(widget, x, y, w, h, QString(u'aäoöuü'))
Das geht so nicht - wenn ich das so schreibe, hängt das Widget an der Stelle.
Hyperion hat geschrieben: Du solltest Dir noch einmal das Unicode-Howto durchlesen. Durch ein .encode() wandelst Du Unicoe ja wieder in eine Byte-Codierung um. Das kann also nicht die Lösung sein.
Das es nicht die Lösung ist, habe ich auch schon gemerkt.
Hyperion hat geschrieben: Speicherst Du Dein Script auch wirklich im UTF-8 Format?
Ja, 100%ig.
Hyperion hat geschrieben: Und es gibt ein extra Qt-Forum hier im Board - da passt Dein Thread besser rein. (Zumal Du nicht wirklich explizit erwähnst, dass es sich um ein PyQt-Problem handelt. Es gibt für Python durchaus auch andere GUI-Libs)
Wenn ich wüßte, was PyQt ist, würde ich das durchaus in Betracht ziehen.
Wenn du meinst, es wäre da besser aufgehoben, bitte ich mal einen Mod, den Thread zu verschieben.
Antworten