TD 1 ISN
unknown
python
2 years ago
6.6 kB
24
Indexable
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()
Editor is loading...
Leave a Comment