## 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 )
```