Ausgabe von Sonderzeichen in Tkinter

Fragen zu Tkinter.
Antworten
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 7. Juni 2006, 21:05

Ich schreibe ein Ansi-Terminal-Programm zur Ausgabe in Tkinter. Die Programmierumgebung ist Windows ME. Obwohl der verwendete monospaced-Font "SystemPC" auch die entsprechenden Sonderzeichen zur Darstellung von Rahmen enthält, werden im Text-Widget immer die "Standard"-extended-ASCII-Zeichen (80h-FFh) dargestellt, z.B. Umlaute statt Linien. Die einfache Ausgabe als Unicode änderte nichts. Auch der Versuch, die ASCII-Zeichen in vergleichbare Unicode-Zeichen mittels des Dictionaries
ansi2unicode={ \
'\xB3':u'\u2502', '\xB4':u'\u2524', '\xB9':u'\u2563', \
'\xBA':u'\u2551', '\xBB':u'\u2557', '\xBC':u'\u255D', \
'\xBF':u'\u2510', '\xC0':u'\u2514', '\xC1':u'\u2534', \
'\xC2':u'\u252C', '\xC3':u'\u251C', '\xC4':u'\u2500', \
'\xC5':u'\u253C', '\xC8':u'\u255A', '\xC9':u'\u2554', \
'\xCA':u'\u2569', '\xCB':u'\u2566', '\xCC':u'\u2560', \
'\xCD':u'\u2550', '\xCE':u'\u256C', '\xD9':u'\u2518', \
'\xDA':u'\u250c'}
umzuwandeln, scheiterte, da die Größe der Rahmenzeichen dann nicht zu den anderen Zeichen paßt. Bei Anpassung der Breite der Unicode-Zeichen wird die Höhe zu klein. Hat jemand eine Idee, wie man Tkinter (oder liegt das Problem bereits bei Windows?) zwingen kann, die Zeichen 80h-FFh aus dem Font "SystemPC" zu verwenden?
BlackJack

Mittwoch 7. Juni 2006, 21:36

"Versteht" der verwendete Font denn Unicode? Was passiert, wenn Du einen anderen Font verwendest, der 1. die "iso10646-1" (Unicode) kennt und 2. die entsprechenden Zeichen enthält!?

(Die ``\`` am Zeilenende sind übrigens nicht nötig solange es noch geöffnete Klammern gibt.)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Donnerstag 8. Juni 2006, 20:16

Mit dem Font "Courier New", der "iso10646-2" versteht und die Rahmenzeichen enthält, klappt die Darstellung. Ich mußte lediglich noch die Umlaute und 'ß' in das Dictionary zur Umwandlung ASCII in Unicode eingeben.
Antworten