Bonjour à tous,

Dans le code ci-après, je cherche à comprendre à quoi correspond la 2° valeur qui est renvoyée par 'args' : ici c'est '' et à quoi elle sert.

'PY_VAR0' est le nom de textvariable et 'w' est le mode mais '' ?

Serait-il possible d'utiliser cette deuxième valeur pour 'remonter' le nom en clair du 'textvariable' ( s0, s1, etc. ) dans l'exemple.


Sinon comment obtenir le nom de textvariable dans la fonction 'OnValidate(*args)' pour factoriser dans le cas de saises similaires multiples ?


Apparemment, la fonction 'vars()[x]' qui fonctionne bien dans la boucle principale pour construire les 'Entry' et 'textvariable' est inopérante dans la fonction 'OnValidate(*args)'.

Je souhaitais reconstruire ainsi le nom de la StringVar() mais ça marche pas.

L.P.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
from tkinter import*
 
def affiche(event):
    w=event.widget
    etq.config(text=w.get())
 
def OnValidate(*args):
#    print(args) # donne-> ('PY_VAR0', '', 'w')
##    q=int(args[0][6:8]) ; print(q)
##    tv='s%d' % q ; print(tv)
##    print(vars()[tv]) ## non reconnu comme variable
    for c in s0.get():
        if not c.isdigit():
            root.event_generate('<BackSpace>')
 
root = Tk()
entries = []
 
for z in range(-1,6):
    t='s%d' % (z+1) # ;print(t) ; vars()[t]=''
    vars()[t]=StringVar() # ; print(vars()[t])
    vars()[t].trace_variable("w", OnValidate)
    p='e%d' % (z+1)  ; print(p)
    vars()[p] = Entry(root, textvariable =vars()[t])
    vars()[p].pack()
    vars()[p].bind('<Return>', affiche)
    print(vars()[p])
    entries.append(vars()[p],)
 
etq=Label(text='')
etq.pack()
entries[0].focus_set()
 
root.mainloop()