2010-02-15 9 views
4

J'ai une fenêtre Tcl/Tk avec une zone de saisie dans laquelle je voudrais forcer la saisie de caractères majuscules. Autrement dit, si des lettres sont tapées, je voudrais qu'elles apparaissent en majuscules dans le champ de saisie, au lieu de simplement rejeter toute entrée en minuscules.Entrée de majuscules de force dans le champ de saisie Tcl/Tk

J'ai regardé la documentation pour entry et la page Entry Validation sur le wiki Tcl/Tk, mais je ne dois pas chercher au bon endroit car bien qu'il y ait beaucoup d'exemples de validation, je ne trouve pas d'exemple de l'entrée de la clé de filtrage pour changer le cas.

Le plus proche que je suis en mesure d'obtenir est quelque chose comme ce qui suit:

entry .message -validate key -validatecommand { 
    .message insert %i [string toupper "%S"] 
    return 0 
} 

Cela force le premier caractèretapé en majuscules, mais les caractères suivants ne sont pas traduits. En fait, le script de validation n'est pas appelé du tout après le premier caractère. Si j'omets la commande .message insert pour le test, le script de validation est appelé pour chaque caractère.

Répondre

5

Si vous définissez une nouvelle valeur pour votre entrée dans votre commande de validation, la validation est désactivée (vraisemblablement pour empêcher une boucle infinie). Cependant, vous pouvez le rallumer ensuite:

entry .message -validate key -validatecommand { 
    .message insert %i [string toupper "%S"] 
    .message configure -validate key 
    return 0 
} 
+1

Notez que j'ai également dû vérifier le type d'action ('% d') pour m'assurer qu'il était 1 (insertion), sinon la suppression du texte ne fonctionnerait pas. –

1

Vous pouvez également utiliser les événements et les liaisons:

entry .message 
bind .message <KeyRelease> { 
    set v [string toupper [.message get]] 
    .message delete 0 end 
    .message insert 0 $v 
    } 

pack .message 

Cela donne une idée du genre de chose que vous pouvez regarder faire - le traitement dans le L'événement est très simple ici et pourrait être grandement amélioré.

Questions connexes