par , 09/03/2015 à 21h50 (1224 Affichages)
tkinter propose des objets spécifiques pour stoker les variables usuelles :
chaine de caractère : StringVar()
entier : IntVar()
double : DoubleVar()
booléen : BooleanVar()
L'intérêt de ces objets est que l'on peut associer un callback à la modification de la valeur de la variable, quelque soit la cause de ce changement (saisie directe dans un widget Entry ou résultat d'un calcul).
Voici une illustration : c'est une calculette qui calcule le résultat au vol : pas besoin d'appuyer sur la touche <Retour>. Le mécanisme mis en oeuvre est d'associer au widget Entry un callback qui tente de calculer le résultat de la formule à chaque fois que celle-ci est modifiée.
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
| import tkinter as tk
from math import *
import string
res=''
res0=''
def evaluer(*args):
global res, res0, tk_texte, tk_resultat
txt = tk_s.get()
try:
res0 = res
res = '= ' + str(eval(txt))
except:
res = '?'
tk_resultat.configure(text = res) # change l'attribut text de l'objet resultat
# ----- Programme principal : -----
# création des objets tinker
tk_root = tk.Tk() # crée la fenêtre principale
tk_s = Tk.StringVar() # la chaine en cours de saisie
tk_entree = tk.Entry(tk_root, textvariable=tk_s) # crée un widget "ligne de saisie" dans fenetre. Associe la saisie à la variable tk_s
tk_resultat = tk.Label(tk_root) # crée un widget texte pour le résultat du calcul
# mise en page
tk_entree.pack()
tk_resultat.pack()
# définition des événements
# Le seul événement capturé est la modification de la chaine en cours de saisie
tk_s.trace_variable("w", evaluer)
# lancement
tk_entree.focus_set() # donne le focus à la boite de saisie
tk_root.mainloop() # lance l'appli |