## Programme à connaitre: - Savoir lire un fichier - POO - Methode - Heritage - Tkinter: - Widgets: - Button - Label - Entry - Scale - Radiobutton - Dimensionnement et positionnement des widgets - Évenements des widgets - Savoir créer une interface autour d'une fenêtre - Savoir créer une GUI en fonction de __pack__ et __grid__ # Savoir lire un fichier # POO ```python class MyClass: def __init__(self, value): self.value = value def method(self): # <= signature, une méthode c'est un comportement, value c'est un état return self.value ``` -> Une classe est un type d'objet qui contient des attributs et des méthodes -> Une instance d'une classe est un objet qui est créé et qui a comme type une classe -> Une classe est une abstraction, càd que l'on peut l'utiliser sans connaitre son implémentation -> On peut avoir des classes interchangeables, càd elles peuvent être switch entres-elles, si elles ont les mêmes méthodes et attributs -> les attributs/méthodes privés commencent par `_` ## Héritage ```python class Animal: def __init__(self, poids): self.poids = poids def tufaisquoi(self): print("rien") class Chat(Animal): def __init__(self): super().__init__(poids) self.race = "miaouuuuuuuu <3" def tufaisquoi(self): print("dors") ``` ici, chat __hérite__ d'Animal. De plus il __redéfinis__ la méthode `tufaisquoi`. ### Méthodes spéciales: - `__str__` / `__int__` utilisé pour la conversion de type `str/int()` - `__eq__(self, b)` vérifie l'égalité entre `self == b` - La fonction `type(x)` renvoie le type de $x$ , c'est nécessaire parfois de vérifier pour la fonction `__eq__` (par exemple pour vérifier si on fait une égalité entre un vecteur et un nombre, ça n'a pas de sens) ----- # GUI une gui est un dispositif de dialogue homme-machine (IHM). Elle se construit sur la base de composants graphiques préalablement définsi dans uen bibliothèque Donc, on a des widgs qui sont des éléments graphiques. Certains sont des conteneurs et contiennent d'autre widgets (par exemple, une colonne/fenêtre contient plusieurs sous widgets). Tout les widgets doit être contenu dans un autre sauf la racine (la fenêtre) ```python import tkinter as tk class Fenetre(tk.Tk): def __init__(self): super().__init__() self.geometry("1920x1080") # LargeurxHauteur self.title("Titre") # on stoque le widget créé dans une variable de la classe pour le réutiliser/redéfinir plus tard self.bouton = tk.Button(self, text="...") self.label = tk.Label(self, text="") # texte fixe self.saisie = tk.Entry(self, text='') # text d'input self.scale = tk.Scale(self, from_=0, to=200, orient='horizontal') # bare de sélection 0 [-o--] 200 # rappel: from tkinter import scrolledtext self.scrolledtext = scrolledtext.ScrolledText(self, width=69, height=420) self.scrolledText.insert(tk.INSERT, 'urmom\n') self.monWidget = tk.Label(self, text="mon widget", foreground="black", background="white", activeforeground="red", activebackground="white", padx="10px", pady="10px", width=400, height=20, ) self.monWidget.pack(LEFT) # coupe la zone en 2 groupes, et on sélectionne, ne pas oublier le PACK HAIAAAAAA self.monWidget.place(x=20,y=69) self.monWidget.grid() # coupe la zone en grille et place dans une cellule # l'ordre des packs est important !!! app = Fenetre() app.mainloop() ``` ![[Pasted image 20250323162825.png]] Un widget est un dictionnaire de tout ces attributs ! ```python # <=> self.saisie.config(text = "owo") self.saisie["text"] = "owo" ``` ## Les évènements: Notre code était linéaire alors que maintenant on peut avoir des intéractions décidés par l'utilisateurs. Donc on doit passer par un gestionnaire d'évènement: >[!definition] >Un gestionnaire d'évènements est une sorte de boucle infinie, à l'écoute des actions de l'utilisateurs. Un évènement, c'est soit une frappe d'une touche, clic de souris... On définit un event par deux chevrons `<EVENT>` | Souris (click gauche) click | `<Button-1>` | | ---------------------------- | ------------------------------------ | | Souris (click droit) declick | `<ButtonRelease-3>` | | Touche `s` pressé | `<KeyPress-s>` (ou `>Any-KeyPress>`) | | Touche `u` relachée | `<KeyRelease-u>` | ```python # dans une classe: def uwu(self, event): def __init__(self): # [...] self.button = tk.Button(self, text="urmom") self.bind('<KeyPress-s>', self.uwu ) ```