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()

