Initiation à la programmation python

Programming, Math · course

Voir tous les documents en programmation

Initiation à la programmation python

Séance en ligne du 24/01/2021

Enseignante Tutrice : Mme Mansouri L.

Partie abordée :

Module 10: Les modules

Module 11: Les interfaces graphiques avec tkinter

Module 12: Le module Numpy

Module 10:

Les modules

1. Présentation des modules

4

Un module est un fichier script Python permettant de définir des éléments de programme réutilisables. Ce mécanisme permet d’élaborer efficaçement des bibliothèques de fonctions ou de classes.

Avantages des modules :

▪ réutilisation du code; ▪ la documentation et les tests peuvent être intégrés au module; ▪ réalisation de services ou de données partagés; ▪ partition de l’espace de noms du système.

2. Chargement des modules externes

Syntaxe from module import *

from module import fonctions_a_importer import module

Description Charger la totalité du module. Cette instruction charge le module, l’éxécute et place toutes les fonctions du module (et noms variables) courant

l’espace

dans

de

Charger que certaines fonctions du module On importe le module. En revanche les fonctions ne sont plus placées dans l’espace de noms courants mais dans un espace propre. Pour y accéder, il faut préciser qu’on utilise la fonction dans cet espace de noms

Exemples from math import *

from math import sin,cos

import math

import module nom_alias

as

Faciliter l’utilisation en précisant un alias pour cet espace de noms

import math as m

6

L’utilisation d’un objet d’un module (les variables, les constantes, les fonctions,..) se fait avec cette syntaxe :

module.objet module.fonction(param1, param2, ...)

Exemples :

import datetime

x = datetime.datetime.now() print(x) x = datetime.datetime(2020, 10, 10) print(x) print(x.year)

import math

Affichage

from datetime import *

2020-10-10 08:53:11.288346 2020-10-10 00:00:00 2020

x = datetime.now() print(x) x = datetime(2020, 10, 10) print(x) print(x.year)

x = math.ceil(1.4) # arrondit un nombre vers le haut à son entier le plus proche y = math.floor(1.4) #arrondit un nombre vers le bas à son entier le plus proche print(x) # affiche 2 # affiche 1 print(y)

3. Modules personnalisés

 Pour créer un module , il suffit d'écrire un ensemble de fonctions (et/ou de

constantes) dans un fichier, puis d'enregistrer ce dernier avec une extension .py (comme n'importe quel script Python).

Exemple :

puissance.py

"""Un module pour afficher la puissance des nombres"""

def carre(valeur):

resultat = valeur**2 return resultat

def cube(valeur):

resultat = valeur**3 return resultat

from puissance import carre

a = 5 u = carre(a) print("le carre vaut", u)

>>> import puissance >>> help(puissance) Help on module puissance: NAME

puissance - Un module pour afficher la puissance des nombres

FUNCTIONS

carre(valeur) cube(valeur)

FILE

d:\cours python\puissance.py

Les packages

un package :un dossier qui rassemble plusieurs modules.

 Le nom du package est le même que celui du dossier.

 On crée le fichier __init__.py dans le dossier, qui indique qu'il s'agit d'un package .

 On peut importer des packages en utilisant la syntaxe:

nom-paquet.nom-module.nom-element.

Puissance.py

Operations.py

Test.py

def carre(valeur):

resultat = valeur**2 return resultat

def cube(valeur):

resultat = valeur**3 return resultat

def addition(val1,val2): return val1+val2

_init__.py

def multi(val1,val2): return val1*val2

from package1 import puissance,operations n1=int(input("donner une valeur 1 : ")) n2=int(input("donner une valeur 2 :")) r1=puissance.carre(n1) print("le carré est :",r1) r2= operations.multi(n1,n2)) print("la multiplication de ",n1," par",n2," est:",r2)

5. Quelques modules courants

9

▪ math : fonctions et constantes mathématiques de base (sin, cos, exp, pi...).

▪ sys : interaction avec l'interpréteur Python, passage d'arguments.

▪ os : dialogue avec le système d'exploitation.

▪ random : génération de nombres aléatoires.

▪ time : accès à l'heure de l'ordinateur et aux fonctions gérant le temps.

▪ Calendar : fonctions de calendrier ;

▪ urllib : récupération de données sur internet depuis Python.

▪ Tkinter : interface python avec Tk. Pour la création d'objets graphiques

▪ pickle : écriture et lecture de structures Python (comme les dictionnaires par

exemple).

▪ Pandas : un module complémentaire qui permet la manipulation et l’analyse des

données.

▪ Numpy :un module complémentaire destiné à offrir à Python des outils de calculs

scientifiques avancés.

Module 11:

Les interfaces graphiques avec Tkinter

1. Présentation du module

11

▪ Plusieurs autres bibliothèques graphiques ont été proposées pour python :

wxPython, pyQT, pyGTK, etc.

▪ Tkinter (Tool Kit interface) est un module intégré à la bibliothèque standard de Python,

permettant de créer des interfaces graphiques :

•des fenêtres, •des widgets (boutons, zones de texte, cases à cocher, …), •des évènements (clavier, souris, …).

▪ Tkinter est disponible sur Windows et la plupart des systèmes Unix : les interfaces crées avec

Tkinter sont donc portables.

▪ Tkinter a l'avantage d'être disponible par défaut, sans nécessiter une installation

supplémentaire.

2. Le squelette d’une interface tkinter

12

La création d’une interface graphique à l’aide de tkinter est faite en suivant ces étapes:

1

2

3

4

Importation du module tkinter

Création de la fenêtre principale de l’interface graphique

L’ajout de un ou plusieurs widgets graphiques

L’entrée de la boucle d’événements principale pour agir à chaque événement déclenché par l’utilisateur

Exemple

13

Import des noms du module from tkinter import

Création d'un objet "fenetre " qui servira de référence à tous les autres objets fenetre = Tk() fenetre.title("Exemple") # titre de la fenêtre principale fenetre.geometry("520x220") # dimension de la fenêtre principale

Titre (Label) On crée un objet-label « titre ». Les attributs sont : « fenetre » l’interface et le texte à afficher titre = Label(fenetre, text = " PYTHON, est fantastique ! " )

la méthode pack place l’objet titre dans "fenetre "

titre.pack()

Ajout des autres widgets # .........................

On crée une boucle sur "fenetre " pour qu’elle surveille en permanence ce qui s’y passe.

fenetre.mainloop()

2. Les widgets Tkinter

14

Les contrôles les plus utilisés :

Widget

Description

Label Entry Text

Un widget utilisé pour afficher du texte à l'écran Un widget de saisie de texte qui n'autorise qu'une seule ligne de texte Un widget de saisie de texte qui permet la saisie de texte multiligne

Checkbutton

est utilisé pour afficher un certain nombre d’options sous forme de cases à cocher. L’utilisateur peut sélectionner plusieurs options à la fois.

Radiobutton

Listbox Combobox Button

Frame

Canvas

est utilisé pour afficher un certain nombre d’options sous forme de boutons radio. L’utilisateur ne peut sélectionner qu’une seule option à la fois.

est utilisé pour fournir une liste d’options à un utilisateur. liste avec une barre de défilement incluse Un bouton qui peut contenir du texte et peut effectuer une action lorsque vous cliquez dessus Une région rectangulaire utilisée pour regrouper les widgets associés ou fournir un remplissage entre les widgets

est une zone rectangulaire destinée à contenir des dessins ou d’autres figures complexes.

2.1 Le contrôle zone de texte

15

Une zone de texte sert à insérer dans une fenêtre graphique une légende indiquant ce qu’il faut insérer dans contrôle voisin. Une zone de texte correspond à la classe Label. Pour créer une zone de texte, il suffit d’écrire la ligne suivante :

zone_texte =Label (fenetre, text = "zone de texte")

Il est possible de modifier les couleurs du texte,du fond ,de la police et sa taille:

label = Label(fenetre, text="Salut tout le monde !", fg="blue", bg="yellow" font = ("Helvetica", 32))

2.2 Le contrôle zone de saisie

16

Une zone de saisie a pour but de recevoir une information entrée par l’utilisateur. Une zone de saisie correspond à la classe Entry ; la syntaxe est la suivante :

saisie = tkinter.Entry ()

Pour modifier le contenu de la zone de saisie, il faut utiliser la méthode insert qui insère un texte à une position donnée.

saisie.insert (pos, "contenu")

Pour obtenir le contenu de la zone de saisie

contenu = saisie.get ()

Pour supprimer le contenu de la zone de saisie entre deux positions

saisie.delete (pos1, pos2) Exemple : saisie.delete (0, len(saisie.get()))

2.3 Le contrôle zone de saisie à plusieurs lignes

17

saisie = tkinter.Text()

Pour modifier le contenu de la zone de saisie, on utilise insert qui insère un texte à une position donnée.

Pour obtenir le contenu de la zone de saisie, il faut utiliser la méthode get qui retourne le texte entre deux positions. La position de fin n’est pas connue, on utilise la chaîne de caractères "end" pour désigner la fin de la zone de saisie.

Pour supprimer le contenu de la zone de saisie entre deux positions

Pour modifier les dimensions de la zone de saisie à plusieurs lignes

pos = "0.0" saisie.insert(pos,"première ligne\n seconde ligne")

pos1 = "0.0" pos2 = "end" #ou tkinter.END contenu = saisie.get (pos1, pos2)

saisie.delete (pos1, pos2) Exemple : saisie.delete(0, len(saisie.get()))

saisie.config(width,height) # width <--> largeur # height <--> hauteur en lignes Exemple: saisie.config (width = 10,height = 5)

2.4 Le contrôle case à cocher

18

Le widget Checkbutton est utilisé pour afficher un certain nombre d’options à un

utilisateur sous forme de case à cocher.

La syntaxe est la suivante :

case = Checkbutton ( master, option = value, ... )

Où: master : Cela représente la fenêtre parent. option : Voir ci-dessous la liste des options les plus utilisées

Tableau de quelques options pour le widget Checkbutton

Option

Description

bd bg fg font height

justify

width

Publicité

Largeur de bordure en pixels. La valeur par défaut est 2. Couleur de fond normale. Couleur normale du premier plan (texte). Police de texte à utiliser pour l’étiquette du Checkbutton. Hauteur du Checkbutton selon les lignes de texte. •LEFT pour justifier le texte à gauche de chaque ligne; •CENTER pour centrer le texte; •RIGHT pour justifier le texte à droite. Largeur du bouton en lettres (si du texte) ou en pixels (si une image).

19

Pour utiliser un Checkbutton, on doit créer une variable Tkinter et pour inspecter l’état du bouton, on doit interroger la variable.

from tkinter import * gui = Tk() var = IntVar() #mémorise la valeur de la case à cocher c = Checkbutton(gui, text="Ma CheckBox", variable=var) # gère l’apparence au niveau de l’interface graphique c.pack() mainloop()

Par défaut, la variable est définie sur 1 si le bouton est sélectionné, sinon 0. Vous pouvez modifier ces valeurs à l’aide des options onvalue et offvalue.

c = Checkbutton(gui, text="Ma CheckBox", variable=var, onvalue = 1, offvalue = 0)

Pour savoir si la case est cochée ou non, il suffit d’exécuter l’instruction :

v.get () # égal à 1 si la case est cochée, 0 sinon

Pour cocher et décocher la case, il faut utiliser les instructions suivantes :

case.select () # pour cocher case.deselect () # pour décocher

Il est possible d’associer du texte à l’objet case à cocher :

case.config (text = "case à cocher")

2.5 Le contrôle bouton radio

20

Le Radiobutton est un widget Tkinter standard utilisé pour implémenter un bouton à choix multiples.

La syntaxe est la suivante :

btn = Radiobutton ( master, option = value, ... )

Où: master : Cela représente la fenêtre parent. option : Voir ci-dessous la liste des options les plus utilisées

Tableau de quelques options pour le widget Checkbutton

Option

Description

bd bg fg font height

justify

width

value

Largeur de bordure en pixels. La valeur par défaut est 2. Couleur de fond normale. Couleur normale du premier plan (texte). Police de texte à utiliser pour l’étiquette du radiobutton. Le nombre de lignes de texte (pas de pixels) sur le bouton radio. La valeur par défaut est 1. •LEFT pour justifier le texte à gauche de chaque ligne; •CENTER pour centrer le texte; •RIGHT pour justifier le texte à droite. Largeur du bouton en lettres (si du texte) ou en pixels (si une image). Lorsqu’un bouton radio est activé par l’utilisateur, sa variable de contrôle est définie sur sa valeur actuelle. Si la variable de contrôle est un StringVar, on donne à chaque bouton radio du groupe une valeur de type String. Si la variable de contrôle est un IntVar, on donne à chaque radiobutton une valeur entière.

Exemple :

21

from tkinter import *

def sel():

ch = "Vous avez sélectionné : " + v.get()

mess.config(text = ch)

gui = Tk()

v = StringVar()

v.set("Python") # initialiser

Avant sélection d’un choix

r1 = Radiobutton(gui, text="Python", variable=v, value="Python", command=sel)

Après sélection d’un choix

r1.pack(anchor = W) #positionner le widget selon la direction donnée

r2 = Radiobutton(gui, text="Java", variable=v, value="Java", command=sel)

r2.pack(anchor = W)

r3 = Radiobutton(gui, text="PHP", variable=v, value="PHP", command=sel)

r3.pack(anchor = W)

mess = Label()

mess.pack()

gui.mainloop()

2.6 Le contrôle liste

22

Le widget Listbox est utilisé pour afficher une liste d’éléments à partir de laquelle un utilisateur peut sélectionner un certain nombre d’éléments.

La syntaxe est la suivante :

liste = Listbox ( master, option = value, ... )

Tableau de quelques options

option : Voir ci-dessous la liste des options les plus utilisées

Où: master : Cela représente la fenêtre parent.

Option

bd bg fg font height width

selectmode

Description Largeur de bordure en pixels. La valeur par défaut est 2. Couleur de fond normale. Couleur normale du premier plan (texte). Police de texte à utiliser pour la liste. Nombre de lignes (pas de pixels!) Affichées dans la zone de liste. La valeur par défaut est 10. La largeur du widget en caractères. La valeur par défaut est 20. Détermine le nombre d’éléments pouvant être sélectionnés et la manière dont les éléments sont sélectionnés: •BROWSE: on peut sélectionner qu’une seule ligne dans la liste. Si on clique sur un élément, puis on fait glisser vers une autre ligne, la sélection suivra la souris. C’est la valeur par défaut. •SINGLE: on peut sélectionner qu’une seule ligne et on ne peut pas faire glisser la souris. •MULTIPLE :on peut sélectionner n’importe quel nombre de lignes à la fois. Le clic sur une ligne permet de choisir si elle est sélectionnée ou non. •EXTENDED: on peut sélectionner n’importe quel groupe de lignes adjacentes à la fois en cliquant sur la première ligne et en faisant glisser jusqu’à la dernière ligne.

23

Voici les méthodes les plus utilisées pour ce widget:

Méthode activate(index)

curselection()

delete(first, last=None)

get(first, last=None)

index(i)

insert(index, *elements)

nearest(y) see(index) size()

Description Sélectionne la ligne spécifiée par l’index donné. Renvoie un tuple contenant les numéros de ligne du ou des éléments sélectionnés, en comptant à partir de 0. Si rien n’est sélectionné, retourne un tuple vide. Supprime les lignes dont les indices sont dans la plage [first, last]. Si le deuxième argument est omis, la ligne avec l’index first est supprimée. Renvoie un tuple contenant le texte des lignes dont les indices sont dans la plage [first, last], last est inclus. Si le deuxième argument est omis, retourne le texte de la ligne la plus proche du premier. Positionne la partie visible de la liste de sorte que la ligne contenant l’index i soit en haut du widget. Insérez une ou plusieurs nouvelles lignes dans la liste avant la ligne spécifiée par index. Utilisez END comme premier argument si vous souhaitez ajouter de nouvelles lignes à la fin de la liste. Renvoie l’index de la ligne visible la plus proche de la coordonnée y. Ajustez la position de la liste afin que la ligne référencée par l’index soit visible. Renvoie le nombre de lignes dans la liste.

Exemple :

24

from tkinter import *

gui = Tk()

liste = Listbox(gui)

liste.insert(1, "Blue")

liste.insert(2, "Red")

liste.insert(3, "Green")

liste.insert(4, "Yellow")

liste.insert(5, "Orange")

liste.insert(6, "Black")

liste.pack()

gui.mainloop()

Récupération des éléments de la liste :

for i in range (0, liste.size()):

print(liste.get (i))

Blue Red Green Yellow Orange Black

2.7 Le contrôle liste avec barre de défilement Combobox

25

C’est une liste avec une barre de défilement incluse.

Exemple :

import tkinter import tkinter.ttk as ttk

root = tkinter.Tk()

o =ttk.Combobox(root, values=["ligne 1", "ligne 2", "ligne3", "ligne4"]) o.pack ()

def print_file () : print(o.get())

b = tkinter.Button (root, text="print") b.config (command = print_file) b.pack ()

root.mainloop()

2.8 Le contrôle bouton

26

Voici la syntaxe pour créer ce widget:

btn = Button ( master, option = value, ... )

Où: master : Cela représente la fenêtre parent.

option : Voir ci-dessous la liste des options les plus utilisées

Tableau de quelques options

Méthode

bd bg command fg font

height

highlightcolor image

justify

state

width

Description

Largeur de bordure en pixels. La valeur par défaut est 2. Couleur de fond normale. Fonction ou méthode à appeler lorsqu’on clique sur le bouton. Couleur normale du premier plan (texte). Police de texte à utiliser pour l’étiquette du bouton. Hauteur du bouton selon les lignes de texte (pour les boutons textuels) ou en pixels (pour les images). La couleur du focus lorsque le widget a le focus. Image à afficher sur le bouton (au lieu du texte). •LEFT pour justifier le texte à gauche de chaque ligne; •CENTER pour centrer le texte; •RIGHT pour justifier le texte à droite. Définissez cette option sur DISABLED pour griser le bouton et le désactiver. La valeur ACTIVE lorsque la souris est dessus. La valeur par défaut est NORMAL. Largeur du bouton selon les lettres (si du texte) ou en pixels (si une image).

27

Exemple :

from tkinter import * from tkinter import messagebox

def affich():

messagebox.showinfo("Cours Python", "Bienvenue dans notre cours!")

Au clic sur « cliquez ici! »

gui = Tk() gui.geometry("200x100")

btn = Button(gui, text ="Cliquez ici!", command = affich) btn.pack()

gui.mainloop()

2.9 Le Cadre

28

▪ Un cadre Frame est un conteneur pour d’autres widgets. Il permet de réaliser des

groupes cohérents de widgets.

cadre = Frame(fenetre)

▪

Un cadre LabelFrame a les caractéristiques d’un Frame plus la possibilité d’afficher une étiquette.

from tkinter import * gui = Tk() lframe = LabelFrame(gui, text="Ceci est un LabelFrame") lframe.pack(fill="both", expand="yes")

btn = Button(lframe, text ="Cliquez ici!") btn.pack()

gui.mainloop()

2.10 Le canvas

29

c’est une surface permettant de dessiner des formes géométriques (rectangles, disques, du texte, etc) et de les manipuler (personnalisation, déplacement, suppression, etc). Ce type de widget permet de créer des jeux de toutes sortes.

monCanvas = Canvas(fenetre, width=…, height=.., bg=…, …)

Les formes géométriques sont appelés des items.

Voici les items les plus utiles qu’un canevas peut générer :

Motif géométrique

Item Tkinter

segment de droite, flèche create_line

rectangle carré cercle ellipse texte image png, gif polygone arcs de cercle, d’ellipse

create_rectangle create_oval create_text create_image create_polygon create_arc

Exemple :

from tkinter import *

root=Tk() cnv=Canvas(root, width=200, height=200, bg="silver") cnv.pack() cnv.create_rectangle((10, 20), (200, 100),fill='white') root.mainloop()

3- Gestionnaires de positionnement

30

Tous les widgets Tkinter ont accès à des méthodes de gestion de géométrie spécifiques, qui ont pour but d’organiser les widgets dans la zone de widget parent. Tkinter expose les classes de gestionnaire de positionnement suivantes: pack, grid et place.

 La méthode pack() : Ce gestionnaire de positionnement organise les widgets en blocs

avant de les placer dans le widget parent.

 La méthode place() : Ce gestionnaire de positionnement organise les widgets en les

plaçant dans une position spécifique dans le widget parent.

 La méthode grid() : Ce gestionnaire de positionnement organise les widgets dans une

structure semblable à une table dans le widget parent.

3-1 La méthode pack

31

Cette méthode empile les objets les uns à la suite des autres. Par défaut, elle les empile les uns en dessous des autres. L’exemple suivant produit l’empilement des objets.

import tkinter from tkinter import messagebox gui = tkinter.Tk() l = tkinter.Label (text = "première ligne") l.pack () s = tkinter.Entry () s.pack () e = tkinter.Label (text = "seconde ligne") e.pack () gui.mainloop()

Les objets sont empilés à l’aide de la méthode pack les uns en dessous des autres

On peut aussi les empiler les uns à droite des autres grâce à l’option side.

import tkinter from tkinter import messagebox gui = tkinter.Tk() l = tkinter.Label (text = "première ligne") l.pack (side = tkinter.RIGHT) s = tkinter.Entry () s.pack (side = tkinter.RIGHT) e = tkinter.Label (text = "seconde ligne") e.pack (side = tkinter.RIGHT) gui.mainloop()

32

La méthode pack possède trois options :

▪side à choisir entre tkinter.TOP (valeur par défaut), tkinter.LEFT , tkinter.BOTTOM , tkinter.RIGHT

▪expand : égale à True ou False (valeur par défaut), si cette option est vraie, l’objet occupe tout l’espace.

▪fill : égale à None (valeur par défaut), X, Y, BOTH, l’objet s’étend selon un axe (X ou Y ou les deux).

Remarque :

Lorsqu’un objet n’est plus nécessaire, il est possible de le faire disparaître en appelant la méthode pack_forget

s.pack_forget()

3-2 La méthode grid

33

La méthode grid suppose que la fenêtre qui les contient est organisée selon une grille (matrice) dont chaque case peut recevoir un objet. Le coin supérieur gauche a la valeur de ligne 0 et la valeur de colonne 0.

➢ La méthode grid possède plusieurs options, parmi lesquelles: •column : colonne dans laquelle sera placée l’objet. •columnspan : nombre de colonnes que doit occuper l’objet. •row : ligne dans laquelle sera placée l’objet. •rowspan : nombre de lignes que doit occuper l’objet. •padx : Marge externe horizontale. •pady : Marge externe verticale. •sticky = position

➢ La méthode grid_forget qui permet de faire disparaître les objets.

s.grid_forget() # disparition

from tkinter import * root = Tk() root.title("profile") root.config(bg="lightgrey")

34

Photo de profile image = PhotoImage(file="profile.png") small_img = image.subsample(4,4) #Renvoie un échantillon qui n'utilise que chaque Xe ou Ye pixel img = Label(root, image=small_img) img.grid(row=0, column=0, rowspan=6, padx=5, pady=5)

titre= Label(root, text="Connexion utilisateur ", bg="lightcyan") titre.grid(row=0, column=1, columnspan=4, padx=5, pady=5)

Label(root, text="user", bg="lightgrey").grid(row=1, column=1, padx=5, pady=5, sticky=E) name = Entry(root, bd=3) name.grid(row=1, column=2, padx=5, pady=5)

Label(root, text="Password", bg="lightgrey").grid(row=3, column=1, padx=5, pady=5, sticky=E) prenom = Entry(root, bd=3) prenom.grid(row=3, column=2, padx=5, pady=5)

conn = Button(root, text="connexion!", bg="#6FAFE7", width=15) conn.grid(row=4, column=2, padx=5, pady=5) root.mainloop()

3-3 La méthode place

Publicité

35

La méthode place permet de placer chaque objet à une position définie par des coordonnées.

import tkinter from tkinter import messagebox gui = tkinter.Tk() l = tkinter.Label(text="première ligne") l.place (x=10, y=50)

gui.mainloop()

Remarque :

➢ La méthode place_forge qui permet de faire disparaître les objets.

l.place_forget() # disparition

4. Les événements

36

▪ Une application Tkinter consiste essentiellement en une boucle, déclenchée par la méthode mainloop(), scrutant les événements (events). Ces événements peuvent provenir du clavier (touche frappée, enfoncée, relâchée), de la souris (clic gauche ou droit, glisser/déplacer...) ou du programme lui-même.

▪ La détection de ces événements est automatique, il suffit de spécifier comment lier un

événement particulier à l'action qui doit lui correspondre. C'est l'objet de la méthode bind() (lier en anglais).

▪ La méthode bind permet d’exécuter une fonction lorsqu’un certain événement donné est

intercepté par un objet donné. La fonction exécutée accepte un seul paramètre de type Event qui est l’événement qui l’a déclenchée. Cette méthode a pour syntaxe :

w.bind(evt, fonction)

Où: w est l’identificateur de l’objet devant intercepter l’événement désigné par la chaîne de caractères evt dont les valeurs possibles sont décrites après. fonction est la fonction qui est appelée lorsque l’événement survient.

Remarques : - La fonction doit obligatoirement être déclarée avant son déclenchement dans le code du programme. - La fonction a obligatoirement un paramètre evt : « def fonc(evt) : » Ce dernier permet de récupérer les informations de l’événement.

37

38

Exemple :

39

from tkinter import*

def pointeur(evt):

position.configure(text="Clic détecté en X = "+str(evt.x)+", Y = "+str(evt.y))

fen=Tk()

fen.geometry("400x200" )

fond=Canvas(fen, width=200, height=150, bg="light yellow")

fond.pack()

position=Label(fen,text="Clic détecté en X =''+'','' Y = ''")

position.pack()

fen.bind("<Button-1>", pointeur)

fen.mainloop()

La méthode bind() associé à la fenêtre fen lie l’événement clic-gauche ( ) à la fonction 'pointeur'. Celle ci récupère les coordonnées de l'objet evt par les instructions evt.x et evt.y

Module 12:

Le module Numpy

1. Présentation

41

Il existe de nombreux modules scientifiques sous Python :

• NumPy ( Numerical Python) : est une bibliothèque open source associée au langage Python, créée

spécialement pour le calcul scientifique, notamment le calcul matriciel.

Documentation officielle : https://numpy.org/doc/

• SciPy : fonctions mathématiques puissantes s'appliquant aux tableaux générés par NumPy. C'est la boîte à

outil numérique pour les tableaux NumPy. Elle contient des opérations spécifiques (algèbre linéaire, statistique…) de manipulation de tableaux, de plus haut niveau que celles de NumPy ;

• matplotlib : permet le tracé de graphes de fonctions.

1. Présentation

NumPy est un package du langage Python destiné à manipuler des tableaux (vecteurs

et matrices).

Ce package fournit de multiples fonctions:

• Pour un accès rapide aux données (ex. extraction, recherche)

• Pour les calculs mathématiques, statistiques et logiques (ex. sum, min, max, sort)

• Pour l’intégration de C/C++.

Les tableaux Numpy sont plus performants (rapidité, gestion de la volumétrie) que les

collections usuelles de Python (les Listes)

Les tableaux Numpy sont au cœur de presque tout l'écosystème de data science en

Python.

Les différentes dimensions sont appelées des axes,

tandis que le nombre de

dimensions ( 0 pour un scalaire, 1 pour un vecteur, 2 pour une matrice, etc) est appelé

rang.

42

import numpy as np

pour importer le module numpy

43

Différence entre les listes et les tableaux array

Un tableau ressemble beaucoup à une liste, avec ces avantages:

 Un tableau a une taille fixée lors de sa création.

 Tous les éléments d’un tableau doivent être du même type (lui aussi fixé à la création).

 Vite

 Pratique

 Moins de mémoire

2. Créer un tableau

Fonction

Rôle

Exemple

array(object, dtype, …)

Créer un tableau numpy

import numpy as np a= np.array([1, 2, 5, 3]) mat = np.array([ [3.2, 7, 9], [4, 8.75, 0] ])

zeros(shape, dtype, …)

Retourne un nouveau tableau rempli de zéros. Le type de données par défaut est numpy.float64

v = np.zeros(5) print(v) m = np.zeros(shape=(3,3), dtype=int) m= np.zeros((3,3), int)

ones(shape, dtype, …)

Retourne un nouveau tableau rempli de nombre à virgule flottante de valeur 1

m = np.ones(shape=(3,5)) np.ones(shape=(3,5), dtype=int) [[1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1]]

full(shape, full_value, …) Retourne un nouveau tableau rempli avec la valeur donnée.

Un tableau 42 rempli de la valeur 3.14 np.full((4,2),3.14)

identity( n , dtype = Aucun )

44

Retourne un tableau d'identité. Avec n Nombre de lignes et dtype le type de données de la sortie. La valeur par défaut est float.

np.identity(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])

Fonction

Rôle

Exemple

arange(debut, fin, pas, …)

▪

▪

génère un tableau à une dimension formé d’entiers ou de flottants (Contrairement à la fonction range), commençant à debut, et finissant à fin (valeur exclue), avec un pas. La taille de « step » par défaut est 1.

np.arange(start=1, stop=10)

np.arange(0, 20, 2).reshape(2,5)

linspace(debut, fin, num, …)

Renvoie des nombres régulièrement espacés sur un intervalle spécifié.

np.linspace(start=0, stop=10,num=5)

random.randint(low, high, size, …) Renvoie des entiers aléatoires dans

np.random.randint(10,100,5)

[`low`, `high`[. Si `high` est nul, alors les résultats proviennent de [0, `low`[.

np.random.randint(10, size=(2,2))

random.uniform(low, high, size, …)

Retourne des réels aléatoires dans [`low`, `high`[.

np.random.uniform(2, 5, size=3)

random.random(size)

Retourne des réels aléatoires dans [0.0, 1.0[

np.random.random(2)

45

Création à partir d’un autre objet

46

Conversion à partir d’un fichier

Les données peuvent être stockées dans un fichier texte :

▪loadtxt pour charger, ▪savetxt pour sauver

import numpy as np #charger à partir d'un fichier #typage explicite possible m = np.loadtxt("vecteur.txt",dtype=float) print(m)

#[[ 1. 12. 14. 17. 15. 5. 6.5 10.5]

n = np.loadtxt("vecteur.txt",dtype=int) print(n) #[ 1 12 14 17 15 5 6 10]

Conversion d’une collection (type standard Python)

#liste de valeurs lst = [1.2,3.1,4.5] print(type(lst)) # <class " list " > #conversion à partir d'une liste a = np.asarray(lst,dtype=float) print(type(a)) # <class " numpy.ndarray " > print(a) # [1.2 3.1 4.5]

Exemple 1: Fichier texte

Exemple 2: Fichier csv

47

3. Caractéristiques d’un tableau

Fonction/Attribut

Rôle

Type(tableau)

Retourne le type de la structure

Exemple:

tableau.dtype

tableau.ndim

tableau.size

tableau.shape

Retourne le type d’éléments du tableau

Retourne le nombre des dimensions du tableau

Retourne le nombre d’éléments du tableau

Retourne le nombre des lignes et des colonnes du tableau

48

3. Accéder aux éléments d’un tableau

v

Indice(positif)

Indice(négatif )

i

0

1

2

3

j

-4

-3

-2

-1

m

1

0

-4

0

-4

1

5

9

13

2

1

-3

1

-3

2

6

10

14

3

2

-2

2

-2

3

7

11

15

Publicité

4

3

-1

3

-1

4

8

12

16

n

▪ Pour les vecteurs, accéder à un élément d'indice i en utilisant la syntaxe:

tableau[ i ]

▪ Pour les matrices, accéder à l’élément d’indice i,j en utilisant la syntaxe :

tableau [ i , j ] ou tableau [ i ] [ j ]

▪ Pour accéder aux éléments d’un tableau en utilisant la syntaxe:

tableau[ lower : upper : step ] ; [lower, upper[

Lorsque les valeurs (lower,upper,step) ne sont pas précisés, les valeurs

attribuées par défauts sont (premier élément, dernier élément, 1 ou -1).

import numpy as np m = np.arange(1,17).reshape(4,4) print(m[0,0]) # 1 print(m[-1,-1]) #16 n=m[1:3,2:4] print(n)

49

50

4. Modification d’un tableau

Fonction/Opération

Rôle

Exemple

Le signe "="

Remplacer les valeurs d’un tableau

v=np.arange(1,5) v[1]=9 print(v) # [1, 9, 3, 4] m=np.arange(1,17).reshape(4,4) m[0] = [11, 12, 13, 14] m[1] = 100 m[:,2:4] = 77

append(arr, values, axis)

ajouter une valeur, placée en dernière position

Insert(arr, indices, values, axis)

insérer une valeur dans un tableau

m=np.arange(1,17).reshape(4,4) ligne = np.array([[17, 18, 19, 20]]) # Créer un tableau ligne (1,4) m= np.append(m, ligne, axis=0) # Ajouter une ligne à la fin col = np.array([[7],[7],[7],[7],[7]]) # Créer un tableau col (5,1) m=np.append(m, col, axis = 1) # ajouter une colonne à la fin

m=np.arange(1,17).reshape(4,4) m=np.insert(m,1, [[0,0,0,0]],axis=0) # insérer une ligne à l’indice 1 # insérer deux lignes aux indices respectifs 2 et 3 m = np.insert(m, [2,3],[[5,55],[5,55],[5,55],[5,55] ,[5,55]],axis=1)

51

Fonction/Opération

Rôle

Exemple

delete(arr,indices,axis)

Supprimer via indice

v = np.array([1.2,2.5,3.2,1.8]) # une plage d’indices est possible v = np.delete(v,2)

resize(arr, new_shape)

Redimensionner un tableau, 1 valeur pour vecteur, couple de valeurs pour matrice

m = np.ones(shape=(2,2)) m=np.resize(m,(3,3))

concatenate((a1,a2,..,an), axis) Concaténer une séquence de tableaux le

long d'un axe existant. Si les tableaux sont de dimension > 1, on peut utiliser vstack (vertical) ou hstack (horizontal)

52

m=np.random.randint(0,101,(2,5)) m=np.resize(m,(2,6))

a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) np.concatenate((a, b), axis=0)

4. Copie d’un tableau

Exemple 1:

Exemple 2:

Remarque:

Avec l'opérateur = on ne copie pas vraiment le tableau, c'est plutôt comme un même tableau avec deux noms.

Pour copier un tableau, une solution simple est d'utiliser la fonction copy()

53

5. Tri ,recherche et extraction

Fonction

Rôle

Exemple

sort(arr, axis, kind, …) Renvoie une copie triée d'un

tableau.

a = np.array([[1,5,4],[3,2,1]]) # trier les lignes (axis = 0) pour chaque colonne np.sort(a, axis=0) # trier le tableau aplati np.sort(a,axis=None)

argsort(arr, axis, …)

Renvoie les indices des élements triés

A = np.array([1, 3, -2, 5]) np.argsort(A)

where(condition)

Renvoie les index où une condition donnée est True.

v = np.array([1, 7, 4, -3, 6, 7]) np.where(v==7)

max(arr, axis, ….)

Renvoie la valeur maximal (L’équivalent existe pour min )

a = np.array([[1,4],[3,9]]) np.max(a)

argmax(arr, axis, ….)

Renvoie l’indice de valeur maximal (L’équivalent existe pour min )

54

a = np.array([[6,4],[3,9]]) # recherche indice de valeur max des lignes (axis = 0) pour chaque colonne np.argmax(a, axis=0)

Fonction

Rôle

Exemple

argpartition(a,k)

extract(condition,a)

55

La fonction est utilisée pour créer une copie partitionnée indirecte du tableau a avec ses éléments réorganisés de telle manière que la valeur de l'élément en k-ième position soit à la position qu'elle serait dans un tableau trié. Tous les éléments plus petits que le k- ème élément sont déplacés avant cet élément et tous égaux ou supérieurs sont déplacés derrière lui. L'ordre de tous les éléments dans les partitions n'est pas défini.

est utilisée pour extraire des éléments spécifiques d’un tableau basé sur une certaine condition. Avec extract(), on peut aussi utiliser des conditions comme and et or.

x = np.array([12, 10, 12, 0, 6, 8, 9, 1, 16, 4, 6, 0]) index_val = np.argpartition(x, -4)[-4:] print(index_val) # [1, 0, 2, 8] print(np.sort(x[index_val])) # [10, 12, 12, 16]

0

12

1

10

2

12

3

0

4

6

5

8

6

9

7

1

8

16

3

11

7

9

4

10

5

6

1

9

4

0

10

6

11

0

2

8

a = np.array([1, 7, 3, 13, 6,11,16,19]) cond = np.mod(a, 2)==1 print(cond) #[True True True True False True False True] # Utiliser extract() pour obtenir les valeurs res1=np.extract(cond, a) print(res1) #[ 1 7 3 13 11 19] # Appliquer directement la condition sur extract() res2=np.extract(((a < 5) | (a > 15)), a) print(res2) #[ 1 3 16 19]

6. Opérateurs arithmétiques

Opérateur

Syntaxe

Exemple

Addition

Soustraction

Multiplication

Division

Puissance

Division entière

+

_

*

/

**

//

a=np.arange([5,1,-2, 3]) b=a+4

a=np.arange(4) b=np.arange(4,9) c=b-a

a=np.random.randint(0,100,(3,3))

[[25 31 28] [31 3 69] [40 61 51]]

b=np.zeros((3,3))

c=a*b

np.array([17,8,12.5])/10

np.array([1,2,4,8])**2

np.array([10,17])//np.array([5,11])

Reste de la division entière %

np.array([10,17])%np.array([5,11])

Produit matricielle

dot(a,b)

56

a = [[1, 0], [0, 2]] b = [[4, 1], [2, 2]] np.dot(a, b)

[[4 1] [4 4]]

Exemple:

7. Opérateurs et fonctions logiques

Fonction

Description

greater()

Supérieur à

greater_equal()

Supérieur ou égal à

less()

Inférieur à

less_equal()

Inférieur ou égal à

equal()

Egal à

not_equal()

Différent de

logical_and()

Et logique

logical_or()

Ou logique

Logical_xor

Xor logique

57

Activité:

1) Créer un tableau t qui contient les éléments suivants.

2) Trouver les éléments de t compris entre 10 et 20