µ Anzeige

Fragen zu Tkinter.
Antworten
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Kann mir jemand sagen wie ich das Zeichen µ anzeigen lassen kann?
Es erscheint immer nur ein Strich...

MFG

Stefanie
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Code: Alles auswählen

tk.Label(text = u"\u03bc")
:wink:
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

Danke :D
Konrad Wenzel
User
Beiträge: 15
Registriert: Freitag 3. Oktober 2008, 17:19

auch mue='\xb5'
(alle Zeichen 32...255 darstellbar, hexadezimal )
-- wn --
BlackJack

@Konrad Wenzel: Damit gibt's zwei Probleme: 1. Ist das bei 'latin-1'/'iso5589-1'/'cp1252' das Zeichen für Micro und nicht der griechische Kleinbuchstabe, und 2. funktioniert das eben nur bei Systemen, wo '\xb5' in der vom System verwendeten Kodierung wirklich etwas "mü-artiges" kodiert. Linux-Systeme laufen heutzutage mit UTF-8, da ergibt '\xb5' ein Fragezeichen in der Anzeige.

Code: Alles auswählen

In [55]: unicodedata.name('\xb5'.decode('latin-1'))
Out[55]: 'MICRO SIGN'

In [56]: unicodedata.name(u'\u03bc')
Out[56]: 'GREEK SMALL LETTER MU'
Konrad Wenzel
User
Beiträge: 15
Registriert: Freitag 3. Oktober 2008, 17:19

- Danke, habe nachgeschaut, jetzt, unter SUSE-Linux10.3 kommen nach \xnnn per print nur noch '?', aber Tkinter gibt deutsche Umlaute damit immer noch wie erwartet aus, nicht aber mue oder Euro
-- wn --
Konrad Wenzel
User
Beiträge: 15
Registriert: Freitag 3. Oktober 2008, 17:19

Noch ein Nachtrag zur Erleuchtung:

Code: Alles auswählen

#!/usr/bin/python
#---------------------------------------
# zchu  Zeichen > 127 Test unicode
#---------------------------------------
k=0
for i in range(161,256):
   if k > 5:
      k=0
      print

   print i,' ',hex(int(unicode(i))),unichr(i),'   ',
   k += 1
print 'Listenende'
print '\n ein '+u'\xe4'+' und ein ' +u'\xb5'
-- wn --
BlackJack

Die Erleuchtung sieht aber noch sehr umständlich aus. Insbesondere das ``int(unicode(i))`` ist eine total sinnlose umwandlung von einer Zahl in ein Unicode-Objekt und wieder zurück in die gleiche Zahl. Und die letzte ``print``-Zeile, kann man auch viel einfacher mit *einer* Unicode-Zeichenkette schreiben. Des weiteren fehlt dem Skript der Kodierungskommentar.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def main():
    for i, b in enumerate(xrange(160, 256)):
        if i % 5 == 0 and i:
            print
        print u'%3i %02x %s    ' % (b, b, unichr(b)),
    print 'Listenende'
    print u'\n ein \xe4 und ein \xb5'


if __name__ == '__main__' :
    main()
Konrad Wenzel
User
Beiträge: 15
Registriert: Freitag 3. Oktober 2008, 17:19

- nun je, der Unsinn ist ein Test, etwa wie x=log(exp(y)),
es ist aber auch unsinnig, in einer Laufanweisung ständig zu prüfen, ob das i noch da ist, wenn es nie NULL wird
-- wn --
BlackJack

Ich teste nicht ob das `i` "da" ist, sondern ob es "wahr" ist und es ist doch einmal 0 und damit "falsch" und genau der Fall ist damit gemeint. Nimm das ``and i`` mal raus und Du wirst sehen, dass das einen Unterschied bei der Ausgabe macht.
Konrad Wenzel
User
Beiträge: 15
Registriert: Freitag 3. Oktober 2008, 17:19

Also BlackJack, ich habe das Schnipsel mal verlustlos abgespeckt,
es läuft auch ohne i, ohne enumeration und ohne xrange,
besser für Tabellen ist dann aber noch eine spaltenweise Nummerierung

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def zz():
    for b in range(160, 256):
        if b % 5 == 0:
            print
        print u'%3i %02x %s    ' % (b, b, unichr(b)),
    print 'Listenende'
    print u'\n ein \xe4 und ein \xb5'

def zs():
    # 161...255: Es sind 95 Zeichen, ergibt 19 Zeilen mit 5 Spalten
    # in Zeile 1: Zeichen 161, 161+19, 161+2*19 ... 161+76
    # (allgemeiner evtl.  mit Zeile und Spalte anstelle 19 und 5)
    for a in range(19):
        for c in range(5):
            b = 161 + a + c*19
            print u'%3i %02x %s    ' % (b, b, unichr(b)),
        print
    print 'Listenende'

if __name__ == '__main__' :
    zz()    #   Zeilenweise  Nummerierung
    zs()    #   Spaltenweise Nummerierung
-- wn --
Antworten