2010-07-01 3 views
4

J'essaie de faire en sorte que mon application pygtk se comporte comme le fait openoffice calc, en ce qui concerne le point décimal. Cela signifie que lorsque je reçois une clé KP_Decimal (le point sur le clavier), je veux que mes entrées affichent quel que soit le point décimal dans la locale actuelle (point ou virgule, de manière appropriée).Comment transformer une clé enfoncée en une autre dans pygtk

J'ai cherché depuis longtemps, et je n'ai pas été capable de trouver comment faire cela. Je peux capturer le key_press_event dans le Gtk.Entry, et vérifier un KP_Decimal, et je peux obtenir le paramètre de locale actuel pour le point décimal; mais je ne sais pas comment transformer le point en virgule si nécessaire. Je veux que ce changement soit global pour l'application, et non spécifique à certaines entrées, donc ce serait mieux si cela pouvait être fait par quelque chose de plus général, comme les méthodes de saisie. J'ai lu à leur sujet aussi, et je ne pouvais pas trouver un moyen de les utiliser comme je le veux non plus.

Répondre

2

Une façon vous pouvez le faire est par le sous-classement gtk.Entry, comme ceci:

import gtk 
import locale 

class NumericEntry(gtk.Entry): 
    __gsignals__ = { 
     'key_press_event': 'override' 
    } 
    def do_key_press_event(self, event): 
     if event.keyval == gtk.gdk.keyval_from_name('KP_Decimal'): 
      event.keyval = int(gtk.gdk.unicode_to_keyval(ord(locale.localeconv()['decimal_point']))) 
     gtk.Entry.do_key_press_event(self, event) 

Je n'ai pas entièrement testé, donc il peut y avoir un ou deux cas de pointe, mais il semble fonctionner très bien pour moi. La bonne chose à propos de l'utilisation d'une sous-classe est qu'il est alors facile de remplacer vos widgets existants - il suffit d'utiliser NumericEntry plutôt que gtk.Entry chaque fois que vous avez besoin d'une entrée de texte avec ce comportement.

Espérons que cela aide!

+0

Merci beaucoup pour la réponse! Ce n'est pas exactement ce que je voulais, car cela signifie remplacer chaque entrée de texte, mais c'est beaucoup mieux que de ne pas l'avoir. –

Questions connexes