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