2016-11-22 1 views
-1

J'essaie de valider de façon interactive un widget d'entrée dans tkinter pour permettre uniquement à l'utilisateur d'entrer des caractères dans l'alphabet. J'ai déjà lu un fil très populaire (Interactively validating Entry widget content in tkinter) et à partir de cela j'ai essayé de trouver ma solution mais je n'arrive pas à la faire fonctionner. Dans les commentaires de ce fil était une solution qui ne permettait que des nombres, j'ai utilisé cela pour une partie de mon programme et cela fonctionne parfaitement! Code ici:Impossible de comprendre comment valider le widget d'entrée dans tkinter

from tkinter import * 

root = Tk() 

def testVal(inStr,i,acttyp): 
    ind=int(i) 
    if acttyp == '1': #insert 
     if not inStr[ind].isdigit(): 
      return False 
    return True 

entry = Entry(root, validate="key") 
entry['validatecommand'] = (entry.register(testVal),'%P','%i','%d') 
entry.pack() 

root.mainloop() 

Je voudrais une solution comme celui-ci, avec le seul changement étant qu'il accepte les lettres au lieu de chiffres. Toute aide appréciée

+1

Remplacez simplement 'isdigit' par' est alpha'? – acdr

Répondre

1

Voici la solution que vous cherchez:

def testVal(inStr,i,acttyp): 
    ind=int(i) 
    if acttyp == '1': #insert 
     if not inStr[ind].isalpha(): 
      return False 
    return True 

Heres d'autres choses qui pourraient être utiles:

  • .isdigit() teste si une chaîne est un entier
  • .isalpha() teste si une chaîne contient uniquement des lettres
  • .isalnum() teste si une chaîne ne contient que des lettres et des chiffres
  • .isupper() tests pour majuscules
  • .islower() tests pour en minuscules

Pour d'autres types de données, vous pouvez utiliser isinstance(), par exemple isinstance("34.5", float) retourneront True

Source: https://docs.python.org/3/library/stdtypes.html

+0

je vous remercie ça fonctionne très bien, je n'étais pas au courant de isalpha() j'ai essayé ischar() plus tôt que je l'ai deviné qui pourrait fonctionner comme il semblait logique. – JoeW373