OVH Cloud OVH Cloud

conversion de KeyCode / UnicodeKey en charactère unicode affichable

2 réponses
Avatar
loic.mahe
Hello

Dans une application en Python 2.4 et wxPython 2.5 unicode (sous
Windows XP)
je récupère suite à un événement la touche tapée par l'utilisateur
l'aide de GetKeyCode() ou GetUnicodeKey(), puis je souhaite afficher
le caractère correpondant:

extraits:

[...]
self.Bind(wx.EVT_CHAR, self.EvtChar, self)
[...]
def EvtChar ( self, event ) :
print "===EvtChar==="
print event.GetKeyCode()
print event.GetRawKeyCode()
print event.GetUniChar()
print event.GetUnicodeKey()
print event.KeyCode()
keycode = event.GetUnicodeKey()
[...]
print "touche:", chr(keycode)
[...]

par exemple quand l'utilisateur tape sur 'a' je recois
keycode = '97'
puis je souhaite l'afficher avecla fonction
print "touche:", chr(keycode)
pour cet exemple il n'y a pas de problème j'obtiens:
touche: a

mais j'ai de gros problèmes lorsque l'utilisateur utilise des
charactères
spéciaux en particulier le charactère 'euro' '€'

mon keycode vaut alors
keycode = 8364
et la fonction print "touche:", chr(keycode) ne fonctionne pas
car chr(...) ne fonctionne que pour les keycodes sur 1 octet ou au max
de 255

keycode = 8364
>>> print "touche:", chr(keycode)

touche:
Traceback (most recent call last):
File "<pyshell#19>", line 1, in ?
print "touche:", chr(keycode)
ValueError: chr() arg not in range(256)
>>>

Comment est ce que je peux faire pour retrouver le symbole 'euro' '€'
à partir de son keycode pour pouvoir l'afficher?
ou bien:
Comment est ce que je peux récupérer la touche pressée par
l'utilisateur autrement que par son keycode?
(l'objet sur lequel se déroule l'événement est une ComboBox de
wxPython)

Merci pour toute info/piste pouvant m'aider ...

2 réponses

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Est-ce que le code suivant t'aiderait :

chu=unichr(8364)
print chu.encode('cp1252','replace')


Chez moi, il affiche bien le caractère "Euro" dans une invite de commande
basculée en CP1252.

@-salutations
--
Michel Claveau
Avatar
loic.mahe
Bonjour,

et merci pour ton aide
c'est exactement ce que je cherchais à faire,
mais je ne connaissais pas la fonction unichr()

A+