Entry.trace_variable avec paramètres pour saisie numérique
Bonjour,
Je me lance dans Python3 et j'ai un peu de mal avec les différents concepts utilisés.
J'ai réussi à faire un filtrage de la saisie dans un widgets Entry
J'essaie tant bien que mal à faire pareil avec 2 Entry et là, c'est le drame.
Ne comprenant pas tout, je n'arrive pas à faire marcher mon code
Le premier code fonctionne très bien.
Le second code adapté du premier, c'est la cata
Merci pour votre aide
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
| from tkinter import *
import tkinter as Tk
def OnValidate(*args):
cpt=0
chaine=s.get().replace(',','.')
chn_rempl=''
sign=False
for c in chaine:
if c in '1234657890':
if chn_rempl=='' and c=='0':
continue
else:
chn_rempl+=c
continue
elif c=='.':
cpt += 1
if cpt>1:
continue
else:
if chn_rempl=='':
chn_rempl='0'
e.icursor(2)
chn_rempl+=c
elif c=='-':
sign=not sign
else:
continue
if sign:
chn_rempl='-'+chn_rempl
s.set(chn_rempl)
root = Tk.Tk()
s = Tk.StringVar()
s.trace_variable("w", OnValidate)
e = Tk.Entry(root, textvariable=s)
e.pack()
root.mainloop() |
en essayant avec 2 Entry :
il faudrait (selon moi!) passer s (StringVar) en paramètre
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
| from tkinter import *
import tkinter as Tk
def valider(cc):
cpt=0
chaine=cc.get().replace(',','.')
chn_rempl=''
sign=False
for c in chaine:
if c in '1234657890':
if chn_rempl=='' and c=='0':
continue
else:
chn_rempl+=c
continue
elif c=='.':
cpt += 1
if cpt>1:
continue
else:
if chn_rempl=='':
chn_rempl='0'
#cp.icursor(2)
chn_rempl+=c
elif c=='-':
sign=not sign
else:
continue
if sign:
chn_rempl='-'+chn_rempl
cc.set(chn_rempl)
root = Tk.Tk()
s = Tk.StringVar()
t = Tk.StringVar()
def validers():
valider(s)
def validert():
valider(t)
s.trace_variable("w", validers)
t.trace_variable("w", validert)
e = Tk.Entry(root, textvariable=s)
f = Tk.Entry(root, textvariable=t)
e.pack()
f.pack()
root.mainloop() |