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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #!/usr/bin/env python
import tkinter as tk
from tkinter import ttk
from collections import defaultdict
root = tk.Tk()
root.title("formulaire dans plusieurs onglets")
root.geometry("500x200")
tabControl = ttk.Notebook(root)
tabin = ttk.Frame(tabControl)
tabinbis = ttk.Frame(tabControl)
tab_result = ttk.Frame(tabControl)
tabControl.add(tabin, text ='Entrées 1')
tabControl.add(tabinbis, text ='Entrées 2')
tabControl.add(tab_result, text ='Résultat')
tabControl.pack(expand = 1, fill ="both")
# l'app utilise "que" cette structure pour faire le travail (le modèle)
formulaires = defaultdict(dict)
formulaires["tabin"]["nom"]= tk.StringVar()
formulaires["tabin"]["age"]= tk.StringVar()
formulaires["tabinbis"]["ville"] = tk.StringVar()
formulaires["tabinbis"]["cp"] = tk.StringVar()
formulaires["tab_result"]["calcul"] = tk.StringVar() # graphique, ...
ttk.Label(tabin, text = "Nom et prénom").grid(row = 0, column = 0)
ttk.Label(tabin, text = "Age").grid(row = 1, column = 0)
ttk.Entry(tabin, textvariable=formulaires["tabin"]["nom"]).grid(row = 0, column = 1)
ttk.Entry(tabin, textvariable=formulaires["tabin"]["age"]).grid(row = 1, column = 1)
ttk.Label(tabinbis, text = "Ville").grid(row = 0, column = 0)
ttk.Label(tabinbis, text = "Cp").grid(row = 1, column = 0)
ttk.Label(tabinbis, text = "voir onglet 1 (nom)").grid(row = 2, column = 0)
ttk.Entry(tabinbis, textvariable=formulaires["tabinbis"]["ville"]).grid(row = 0, column = 1)
ttk.Entry(tabinbis, textvariable=formulaires["tabinbis"]["cp"]).grid(row = 1, column = 1)
ttk.Entry(tabinbis, textvariable=formulaires["tabin"]["nom"]).grid(row = 2, column = 1)
tk.Label(tab_result, textvariable=formulaires["tabin"]["nom"]).grid(column=0, row=1, columnspan=2)
tk.Label(tab_result, textvariable=formulaires["tabin"]["age"]).grid(column=0, row=2, columnspan=2)
tk.Label(tab_result, textvariable=formulaires["tabinbis"]["ville"]).grid(column=0, row=3, columnspan=2)
tk.Label(tab_result, textvariable=formulaires["tabinbis"]["cp"]).grid(column=0, row=4, columnspan=2)
tk.Label(tab_result, textvariable=formulaires["tab_result"]["calcul"], text="En attente de données...").grid(column=0, row=5, columnspan=2)
def on_tab_change(event):
#global label_result # juste pour démo
tab = event.widget.tab('current')['text']
print("actualiser", tab)
if tab == "Résultat":
print("Actualisation de cet onglet")
print("refaire les calculs pour les afficher dans cet onglet")
try:
calcul = int(formulaires["tabinbis"]["cp"].get()) * int(formulaires["tabin"]["age"].get())
except ValueError as err:
calcul = "manque une entrée ?" + str(err)
# NORMALEMENT calcul = Formulaires.generer_resultat()
formulaires["tab_result"]["calcul"].set("résultat est ??? " + str(calcul))
else:
print("refaire aussi les calculs ? (si ils sont en cache ou sous-calculs)")
tabControl.bind('<<NotebookTabChanged>>', on_tab_change)
root.mainloop() |
Partager