A propos de (*args) et de  vars()[x]
	
	
		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:
	
| 12
 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() |