TD 1 ISN
unknown
python
7 months ago
6.6 kB
18
Indexable
Never
import tkinter as tk from tkinter import scrolledtext from tkinter import messagebox import csv from math import inf class FenetrePrincipale(tk.Tk): def __init__(self): super().__init__() self.title("Fenêtre pour s'échauffer") self.fichier = 'test.csv' self.dico={} self.age_min=None self.age_max=None self.lecture_data() self.age_min_max() self.creer_widgets() def creer_widgets(self): ''' Création des widgets un à un et insertion grâce aux fonctions pack() ''' # Création d'un bouton 1 (bleu clair) d'ouverture de messageBox # Positionnement tout au sommet de la fenêtre (tk.TOP) self.bouton_1 = tk.Button(self, text="Cliquez pour ouvrir une MessageBox", bg='lightblue') # Création d'un bouton 2 (jaune clair) pour quitter l'application # Positionnement tout en bas de l'espace 'side = tk.BOTTOM') self.bouton_2 = tk.Button(self, text="Quitter l'application", bg='lightyellow') self.bouton_3 = tk.Button(self, text="Afficher l'âge moyen") self.bouton_4 = tk.Button(self, text="Afficher selon seuil") self.bouton_1.bind('<Button-1>',self.messageBox1) self.bouton_2.bind('<Button-1>',self.quitter) self.bouton_1.pack(fill = 'x', side = tk.TOP) self.bouton_3.bind('<Button-1>',self.affiche_age_moyen) self.bouton_2.pack(fill = 'x', side = tk.BOTTOM) self.text_area = tk.scrolledtext.ScrolledText(self, wrap = tk.WORD, width = 50, height = 15, font = ("Times New Roman", 14)) self.text_area.pack(side=tk.LEFT) self.text_area.insert(tk.INSERT,"∗∗∗∗ Zone de texte pour infos ∗∗∗∗" +'\n') self.bouton_3.pack(fill = 'x', side = tk.TOP) self.valeur_seuil = tk.DoubleVar() self.scale = tk.Scale(self,orient='horizontal',from_= self.age_min, to = self.age_max,resolution=1,tickinterval=25,label='Seuil a choisir',variable = self.valeur_seuil) self.scale.pack(fill = 'x') self.bouton_4.pack(fill = 'x', side = tk.TOP) self.bouton_4.bind('<Button-1>',self.affiche_selon_seuil) # A inserer dans la fonction creer_widgets self.select = tk.Label(self, text ="Radiobuttons :", font="Helvetica 10 bold") self.select.pack(anchor = tk.W) self.choix = tk.StringVar() # Variable commune aux 3 RadioButtons self.choix.set("Message") self.radio1 = tk.Radiobutton(self,text="Message simple",variable=self.choix, value="Message") self.radio1.pack(anchor = tk.W) self.radio2 = tk.Radiobutton(self,text="Lister les noms",variable=self.choix, value="Liste") self.radio2.pack(anchor = tk.W) self.radio3 = tk.Radiobutton(self,text="Effacer Scrolltext",variable=self.choix, value="Effacer") self.radio3.pack(anchor = tk.W) self.bouton_6 = tk.Button(self, text="Choix") self.bouton_6.pack() self.bouton_6.bind('<Button-1>',self.execute_choix) # Création de la zone de texte de type scrolledText pour écrire des informations # Positionnement tout à gauche de la fenêtre (tk.LEFT) # Création d'un bouton pour l'écriture dans le ScrolledText # écriture dans la zone de texte à gauche (avec bind): # de l'âge moyen calculé à partir des données du fichier csv # Création d'un scroller entre deux bornes min et max (mises à 0 et 100 d'abord) # Création d'un 2ème bouton pour écriture dans le ScrolledText # Permettra d'écrire la liste des personnes d'âge < seuil (avec bind) # Création des radiobuttons (exercice 2) ###################### #Méthodes utilitaires# ###################### def lecture_data(self): """ créer le dico et met à jour la structure dictionnaire dico :paramètres: le fichier attribut :return: """ with open(self.fichier, newline="") as csvfile: reader = csv.reader(csvfile, delimiter=",") dicotemp = {} for ligne in reader: ident, nom, age = ligne if ident not in dicotemp: dicotemp[ident] = [nom,int(age)] self.dico = dicotemp def age_min_max(self): """ fonction qui détermine les valeurs min et max des âges des personnes :paramètres: :return: """ age=[i[1] for i in self.dico.values()] self.age_min=min(age) self.age_max=max(age) ######################## #Callback d'interaction# ######################## def messageBox1(self,event): """ fonction callback qui renvoie une messagebox simple suite au clic sur le bouton du haut :paramètres: event pour le lier au bouton "bouton 1" :return: """ tk.messagebox.showinfo('Bouton_1', "Ouverture d’une MessageBox") def quitter(self,event): """ fonction permettant de quitter proprement le programme :paramètres: :return: """ self.destroy() def affiche_age_moyen(self, event): """ fonction callback qui calcul l'âge moyen des personnes du fichier csv :paramètres: event pour le lier au bouton "bouton 3" :return: """ age=[i[1] for i in self.dico.values()] self.text_area.insert(tk.INSERT,str(sum(age)/len(age)) +'\n') def affiche_selon_seuil(self, event): seuil = self.valeur_seuil.get() for nom, age in self.dico.values(): if age <= seuil: texte = f"=> {nom} âgé de {age}\n" self.text_area.insert(tk.INSERT,texte) def execute_choix(self,event): if self.choix.get() == "Message": # cochage du radiobutton radio1 self.text_area.insert(tk.INSERT,"Je viens de cocher le choix 1\n") elif self.choix.get() == "Liste": # cochage du radiobutton radio2 self.text_area.insert(tk.INSERT,str(list([i[0] for i in self.dico.values()]))+"\n") else: self.text_area.delete(1.0, tk.END) if __name__ == "__main__": fenetre = FenetrePrincipale() fenetre.mainloop()
Leave a Comment