A propos des controles de saisie en sortie (focusout)
Salut à tous,
A propos des contrôles de saisie en sortie (focusout)
Je souhaiterais soumettre à vos avis éclairés le bout de code ci-aprés qui joue parfaitement son rôle mais il me parait un peu loin des canons du codage.
Le but est de factoriser le contrôle de plusieurs saisies en 'focusout'.
Ne sont acceptées que les saisies décimales >= 0.
L’idéal, (que je n'ai pas réussi à faire) serait de n'autoriser la sortie de l'Entry que si la saisie est conforme sans les allez-retours pour correction.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| # -*- coding: UTF-8 -*-
# Nom: validation_focusout_validate_1.0.py
#-------------------------------------------------------------------------------
from tkinter import *
def valid(ex): ## vérif de la saisie qui doit être >= 0
try:
if ex==1: ## verif de la saisie de Entry: E1
val = float(varE1.get())
if val < 0:
invalid(ex)
elif ex==2:
val = float(varE2.get())
if val < 0: ## verif de la saisie de Entry: E2
invalid(ex)
except ValueError:
invalid(ex)
return 0
return 1
def sortie_e(event):
fen.event_generate('<Tab>')
def invalid(ex):
if ex==1:
E1.focus_set() ## pour revenir sur la saisie incorecte dans E1
E1.select_range(0,END) ## pour remplacer l'erreur
fen.event_generate(0) ## par un 0
fen.event_generate('<Tab>')
elif ex==2:
E2.focus_set() ## pour revenir sur la saisie incorecte dans E2
E2.select_range(0,END)
fen.event_generate(0)
fen.event_generate('<Tab>')
fen = Tk()
varE1 = StringVar() ; varE1.set(0)
varE2 = StringVar() ; varE2.set(0)
E1 = Entry(fen, textvariable = varE1, validate = 'focusout',
validatecommand = lambda ex=1: valid(ex))
E1.grid(column=0,row=0,padx=5)
E2 = Entry(fen, textvariable = varE2, validate = 'focusout',
validatecommand = lambda ex=2: valid(ex))
E2.grid(column=1,row=0,padx=5)
E1.focus_set()
E1.bind('<Return>', sortie_e)
E2.bind('<Return>', sortie_e)
fen.mainloop() |