Python
Python
Source : http://www.ukonline.be/programmation/java/tutoriel/intro.php
Domaines d'application
Python couteau Suisse
Un module pour toute utilisation
Langage de script
Remplace des langages de script tel que Shell
Accès ressources
Script de maintenance
Projet
Langage objet structuré, peut remplacer C++ ou Java
Calcul scientifique
Une bonne alternative à Matlab
Modules : SciPy, NumPy, Mathplot (C)
Calcul mathématique : sagemath
Forces et faiblesses
Force Faiblesse
Stable Non compilé
Apprentissage : très simple Donc plus lent
10
0
C/C++ Java Php Python
Les différents Interpréteur de Python
Python/CPython
Il existe une API d’intégration Python/C qui permet d’étendre les programmes Python par des
composants écrits en C
Ceci permet d’implémenter un système afin de réduire le temps de développement puis, sis besoin,
les éléments qui le nécessitent peuvent être réécrits en C
Jython
Permet la communication entre les programmes Python est des composants Java. Il peut être utile
pour fédérer des applications web en Java.
IronPython
Pour la plateforme .Net
PythonWin
PythonWin a été conçu pour le plateformes MS-Wiondows. Il rend possible l’interaction entre les
programmes python et des composants écrits avec l’API COM.
Les différentes versions de Python
V 2.7 V 3.4
http://pydev.org/download.html
http://pydev.org/manual_101_install.html
Initiation à la syntaxe Python
Syntaxe en bloc
La plupart des structures en Python s’organisent sous la forme de blocs
d’instruction.
La différence entre Python et C, par exemple, est que les blocs ne sont pas
délimités par des caractères spéciaux mais seulement en fonction de
l’indentation.
Exemple:
Exécutable Python
Un programme python est un ensemble
d’instructions
Extension : .py
Exécution : python test.py
Commentaires
#ceci est notre premier programme
Opérateurs logiques
a and b : ET logique booléen, si a est faux, retourne a et b non évalué, sinon
retourne b
a or b : OU logique booléen, si a est vrai, retourne a et b non évalué, sinon
retourne b
not a : NON logique, si a est faux, retourne 'True', sinon retourne 'False’
Opérateurs de comparaison
a = 1<3 # a vaut 'True' car 1 est inférieur à 3.
Les opérateurs
Quelques opérateurs classiques
Les types de données standard
Types numériques
Conversion
>>>int(3.5)
>>>float(3)
>>>int(‘3’)
>>>int(1+1j) #erreur
Séquences
Dans python, le type séquence correspond à une collection ordonnée d’objet
Non modifiables
Str (chaîne de caractères)
Tuple
>>>tuple1=1,2,3.5,’coucou’
>>>tuple2=(1,2,3.6,’coucou’)
Modifiables
Liste
>>>liste1=[1,’Bonjour’, 3.5]
Chaînes de caractères
Les méthodes de la classe String
>>>str.__doc__
Quelques exemples:
>>>chaine=‘Bonjour, ceci est du Python’
>>>print chaine+1
>>>print int(chaine)+1
Découpage de chaînes
Il est possible d'extraire une partie d'une chaîne de caractères :
nom_chaine[début:fin:pas]
# Donne les caractères d'indice i tel que 'debut <= i < fin', le caractère d'indice égal à fin
n'est donc pas pris en compte
Exemples :
chaine = "voici un exemple"
print(chaine[:3]) # renvoie 'voi', équivalent à chaine[0:3]
print(chaine[2:5]) # renvoie 'ici'
print(chaine[7:]) # renvoie 'n exemple', tout ce qui est après l'indice 7
Listes
Définition
Une liste se définit avec la syntaxe suivante:
nom_liste=[element1, element2,element3]
Les éléments peuvent être de types différents
Accès à un élément
>>>liste=[1,2,’texte’]
>>>liste[1]
>>>liste[1] += 2
Les références
Les références : lors d’une affectation d’une variable à une autre, python effectue une
référence et non une copie :
L= [1,2,3]
M=['x',L,'y']
print(M) # Renvoie ['x', [1, 2, 3], 'y']
L[1]=0
print(M) # Renvoie ['x', [1, 0, 3], 'y']
# M contient une référence vers les données de L, donc modifier L
modifie aussi M
# Pour créer une véritable copie de la liste, si M ne devait pas
être modifiée,
# il faudrait utiliser L[:]
L= [1,2,3]
M=['x',L[:],'y']
print(M) # Renvoie ['x', [1, 2, 3], 'y']
L[1]=0
print(M) # Renvoie ['x', [1, 2, 3], 'y']
print(L) # Renvoie [1,0,3]
Liste de compréhension
Syntaxe : [f(x) for x in seq if cdt(x)]
Exemple :
L = [‘Toto’, ‘titi’, ‘TaTa’]
Retourner la liste des chaînes de L qui commencent par
une majuscule tout en les mettant en miniscule
Application : recherche pdfs
Soit une liste de fichiers d’extension différentes ( .txt,
.pdf, .py…)
Ecrire un programme qui retourne la liste des pdfs,
leur nombre
2 solutions :
En utilisant append
En créant une nouvelle liste à partir de la première
Tuples
Un tuple est une séquence dans laquelle il n’est pas possible de modifier les
éléments. C’est une séquence non modifiable.
Pas de suppression
Pas d’ajout d’élément
Pas de modification d’élément
Exemple :
unTuple = tuple("Ok !")
print(unTuple) # Renvoie ('O', 'k', ' ', '!')
tuple2 = ('Ok !', 23, 34, 45, True)
print(tuple2) # Renvoie ('Ok !', 23, 34, 45, True)>
Exemple de tuple utilisé implicitement : l'affectation multiple
a,b = 3,4 # Équivaut à (a,b) = (3,4)
Remarque : pour définir un tuple à un élément il est nécessaire d'ajouter une virgule,
sinon Python considère l'élément comme un nombre. tupleUnElement = (1,)
Dictionnaires
Définition
En python, un dictionnaire permet de stocker un ensemble de données tout comme
le fait une liste ou un tuple. La différence est que les données ne sont pas
ordonnées
Chaque donnée est associée à une clé et non à un indice. Chaque ajout de
donnée consiste à ajouter un couple (clé, valeur)
Les dictionnaires sont de la catégorie maps
Caractéristique
Les dictionnaires sont délimités par des accolades {}
Les clés doivent être de type non modifiables (entier, chaîne, tuple) : elles ne
doivent donc pas être des variables
Un dictionnaire ne peut pas contenir deux clés identique. En revanche, rien
n’empêche d’avoir deux valeurs identiques.
Création directe
nomDictionnaire = { cle : valeur, cle2 : valeur2, cle3 : valeur3 }
Exemple :
dictionnaire = {"Hello !" : "Bonjour !", " Thanks !" : "Merci !", "Bye !" : "Au revoir !« }
Manipulation de dictionnaires
Ajout & modification
dictionnaire = {}
dictionnaire["pseudo"] = "user"
dictionnaire["mot de passe"] = "*"
Accès à une valeur
print(dictionnaire["mot de passe"])
Update() : Méthode qui permet d’ajouter au dictionnaire tous les couples (clé, valeur)
passés en arguments:
dico1 = dict([('abcdef'[i], i) for i in range(6)])
dico2 = dict(clé1=1,clé2=2,clé3=3)
dico1.update(dico2)
print(dico1)
Clear() : effacer tous les couples du dictionnaire
dico1 = dict([('abcdef'[i], i) for i in range(6)])
dico1.clear()
print(dico1)
Manipulation de dictionnaires
Pop() : supprimer le couple précisé par la clé et renvoie la valeur associée à la clé
Application
Ensembles
Définition
Un ensemble est une collection non ordonnée d’objets unique
Il n’y a donc pas de relation d’ordre et il est impossible de retrouver deux éléments
identique
Déclaration
>>>e1 = set((1,1,2,3))
>>>e2 = set([3,4])
>>>{1,2,3} # attention ceci est différent d’un dictionnaire
>>>liste = [1,1,1,2,2,3]
>>>ensemble = set(liste)
>>>print ensemble
>>>liste2 = list(ensemble)
>>>e1&e2
>>>e1|e2
>>>e1-e2
>>>e1^e2
Les structures de contrôle
Structures de test
Structure de test: if
Structures de test : elif
Structures de boucle: while
Mot clé : break
Mot clé : continue
Boucle For
Syntaxe:
For element in liste:
Executer instruction
Exemple:
En principe for s’applique sur tout itérateur, plus loin l’exemple sur la lecture des
fichiers.
input(), raw_input()
La fonction input permet de récupérer une valeur rentrer par l’utilisateur
Cette fonction peut prendre en paramètre une chaine de caractères indiquant à l’utilisateur ce
qu’il doit entrer
Les fonctions
Définition
Une fonction est composé de :
Son nom
Ses paramètres ou arguments: données ou variables passées à la fonctions
Sa sortir: la ou les valeurs retournées par la fonction
Avantages
Le code est réutilisable. S’il est nécessaire de faire la même démarche plusieurs fois, la
fonction permet de définir la démarche puis de l’utiliser par un simple appel
Décomposition du code. Les fonctions permettent de décomposer le code en morceaux qui ont
des rôles bien définis
Les fonctions
Déclaration
Appel
Lorsqu’une fonction n’utilise pas l’instruction return, alors elle renvoie None.
Portée des variables
Les variables définies dans une fonction ont une portée limitée à la fonction. A
contrario, une variable définie dans le programme générale peut être utilisée dans une
fonction
Lorsqu’une variable est utilisée, elle est d’abord cherchée localement puis ensuite si
elle n’est pas trouvée, elle est cherchée globalement
Mot clé global
Le mot clé global permet de préciser qu’une variable appartient à l’espace mémoire
général et non à celui de la fonction. Cependant l’utilisation de ce mot clé n’est pas
toujours recommandé
Passage d’arguments
Les arguments sont passés aux fonctions par affectation
Les arguments non modifiables ne sont pas affecté
Pour modifier un nombre il faut alors, soit utiliser une liste à un élément soit utiliser la syntaxe
suivante
Arguments par défaut
Il est possible de donner une valeur par défaut à certains paramètres. Ainsi si la fonction est
appelée sans donner de valeur à ce paramètre, c’est la valeur par défaut qui est utilisée.
Contraintes: les arguments avec valeur par défaut doivent être déclarés après les autres
arguments
Appel désordonné : les arguments de la fonction peuvent être passés sans ordre. Cependant il faut
bien utiliser l’étiquette de l’argument (étiquette : le nom qui est associé à l’argument lors de la
déclaration de la fonction)
Nombre indéfini d’arguments
Il est possible de définir une fonction avec un nombre d’arguments arbitraires.
Pour préciser cela il faut ajouter le symbole ‘*’ devant l’étiquette du tuple
Applications : Arguments
Ecrire une fonction qui prend en argument une liste,
vérifie que c'est bien une liste de int et affiche la
moyenne, la somme , le max et le min
Aide :[x for x in Liste if cdt] pour créer une liste des
éléments de la Liste qui vérifient la condition cdt.
Définir la fonction cap(‘ chaine test, Ok’)->’ Chaine
test, ok’ et la fonction iscap(‘ Chaine’)->booléen
(prendre en compte les points)
Récursivité
Les fonctions peuvent faire appel à elle-même
Les fonctions récursives ont besoin d’un cas d’arrêt, plus explicitement cela correspond au cas où
la fonction ne va plus s’appeler. Sans cela la fonction rentre dans une boucle infinie
Application récursivité
Réécrire la fonction cap() pour prendre en compte
les points.
Exemple : cap(‘test. un Test’)->’Test. Un test’
Utiliser la récursivité
La fonction Lambda
Définition : fonction simple et anonyme déclarée au milieu de code, stockée dans une variable.
>>> g = lambda x: x*2
>>> g(3)
Utilisation :
Exemple1 : on utilise la fonction filtrer(fonction, séquence), elle permet de filtrer une
séquence en ne gardant que les éléments renvoyant True.
Exemple2 : on utilise la fonction map(fonction, liste), elle permet d’appliquer une opération à
l’ensemble des éléments de la liste
Application lambda
Ecrire une fonction qui prend en argument un entier
n et retourne la fonction puissance n
Retourner les éléments d’une liste qui commencent
par une majuscule
in : L=[‘test’, ‘ToTo’, ‘Titi’]
out : M=[‘ToTo’, ‘’Titi’]
Retourner la longueur des éléments d’une liste
Retourner la longueur + 1 des éléments d’une liste
Formatage de variables:
Mode d’ouverture
Lecture d’une ligne : La méthode readline() retournera tout d’abord la première ligne. Puis la
seconde et ainsi de suite
Se déplacer dans un fichier
Tell() : elle permet de déterminer la position actuelle du curseur.
Ajouter un argument à la méthode readline() permet d’indiquer le nombre d’octets à lire, ici 4.
Ecrire dans un fichier
Write() : permet d’écrire une chaîne de caractères
Animaux
Chasser()
Boire()
Point d’eau
Boire()
Brouter()
Croitre()
Cas de figure
proie Animal
Id Id
Nom Nom
Etat Etat
Brouter(herbe) Boire()
Eau
prédateur
Id
Nom
Etat
Chasser(proie)
Herbe
Taille
Croitre()
Classes, Méthodes et Attributs
Classe : un modèle englobant des objets qui sont identifiables par les mêmes donnée
et ont les mêmes comportements
Elle est ainsi définie par:
Nom
Attributs : données
Méthode : comportements
Espaces de nom et instances
Espace de nom : permettent de faire des
regroupements logiques et résoudre les Module
collisions de noms.
Les différents espaces noms Classe
De méthode
De classe
Méthode 1
De module
Types
Global
Local
Instance : un objet d’une classe
Exemple : Soit une classe Personne dont les
attributs sont nom, prenom, age. Méthode 2
Personne1(‘Dupond’, ‘David’, 25) est une
instance, soit un objet, de la classe Personne.
Encapsulation
L'encapsulation est un mécanisme consistant à rassembler les données et les
méthodes au sein d'une structure en cachant l'implémentation de l'objet, c'est-à-dire
en empêchant l'accès aux données par un autre moyen que les services proposés.
L'encapsulation permet donc de garantir l'intégrité des données contenues dans l'objet
Elle permet également d’effectuer d’autres tâches que de déterminer une valeur ou la
modifier
Héritage et polymorphisme
L’héritage entre classes Polymorphisme est l'idée de
Exemple : Les classes Herbivore et permettre à un même code d'être
Carnivore héritent de la classe utilisé avec différents types
Animal, en l’occurrence la méthode (classes)
boire()
Animal
Source:http://www.commentcamarche.net/contents/8
11-poo-le-polymorphisme
proie prédateur
Exemple : Addition (+) change
selon la classe.
1+2
‘ceci est’ +’ un texte’
Les patrons de conception (motif de
conception/Design pattern)
Un recueil de bonnes pratiques (dans le cadre de la programmation
objet) de conception pour un certain nombre de problèmes
récurrents en programmation basé sur les retours d’expériences.
Exemple : MVC est une combinaison de patrons de conception
Motif d’architecture
Motif de conception
Syntaxe
Python Orienté Objet
Classes, Méthodes et Attributs
En python tout est objet : les chaînes de caractères, les listes,…
Par convention, les noms de classes commencent souvent par une majuscule et ne
comporte pas le caractère souligné ‘_’
L’encapsulation des données : garder privées certains données de l’objet, il n’est pas
possible d’accéder directement à ces données. Il est nécessaire de créer des
accesseurs qui vont permettre d’obtenir la valeur d’un attribut et des mutateurs qui
vont permettre de modifier cette valeur.
Eléments d’une classe:
Nom de classe :
Attributs : variables définies dans le corps de la classe
Méthodes : des fonctions définies dans le corps de la classe
Les constructeurs
Le constructeur (une méthode) sert à créer des instances de la classe. C’est une
méthode spéciale __init__. Elle est appelée lors de l’instanciation
Syntaxe
def __init__(self, attribut1,atrribut2…):
self.attribut1=attribut1
self.attribut2=attribut2
self.methode(*)
class Personne(object):
def __init__(self, nom, prenom, age):
self.nom=nom
self.prenom=prenom
self.age=age
def afficher(self):
print "Je m'appelle %s %s et j'ai %d ans" %(self.nom,
self.prenom, self.age)
personne1=Personne('dupond', 'david',25)
# personne1.adresse='nice'
# print personne1.adresse
personne1.afficher()
Application
Dans la classe, modifier l’attribut âge par date de
naissance de type date et implémenter la méthode
calculAge()
Espaces de noms
Globals() : liste de variables Module
globales
Locals() : liste des variables Classe
locales
Lors d’un appel de variable, Python
Méthode 1
cherche dans :
1. Espace de noms local,
spécifique à la fonction/méthode
en cours.
2. Espace de nom, spécifique au
module en cours Méthode 2
3. Espace de noms prédéfini,
global à tous les modules
Source:http://python.developpez.com/cours/DiveIntoPython/p
hp/frdiveintopython/html_processing/locals_and_globals.php
Encapsulation
__age vs _age
class Personne(object):
def _get_age(self):
return self.__age
Mutateur
def _set_age(self, n):
self.__age = age
nom=property(_get_age, _set_age)
Méthodes spéciales
__init__ : constructeur
__repr__ : affecte la façon dont est affiché l’objet
__str__ : converti l’objet en chaîne de caractères
__add__ : appelée lorsque le symbole + est utilisé
__eq__(self,objet2) : opérateur d’égalité
…
Exemples de classes : String
La classe string est la classe qui correspond aux chaînes de caractères
Quelques méthodes
Exemples de classes : listes
Héritage et polymorphisme
Exemple héritage
Application héritage
Définir la classe STR qui hérite de la classe str
Définir les méthodes
cap(self) : qui prend en argument self et retourne la même chaine
avec une majuscule au début de chaîne et après chaque ‘.’.
iscap(self) : vérifie si une chaîne de caractères est sous format
cap.
Polymorphisme
__add__(self,autre) : concatène deux chaînes en mettant la
deuxième chaîne en cap.
Test de classes
Issubclass() : vérifie si une classe est une sous-classe d’une autre classe
Test.py
print 'ok'
Si cela ne fonctionne pas, il faut ajouter le lien vers python.exe dans la liste des
variables d’environnement.
Arguments passés en ligne de commande.
Pour passer des arguments en ligne de commende
Test.py
import sys
for arg in sys.argv:
print arg
Application
Ecrire un programme qui permet de prendre des
arguments en ligne de commande, vérifie que c’est
bien des entiers et calcule leur somme.
Solution
import sys
sum=0
for arg in sys.argv[1:]:
sum+=int(arg)
print sum
import sys
try:
print sum(map(int,sys.argv[1:]))
except:
print 'Le script prend uniquement des arguments entiers'
Expressions régulières
Les expressions régulières sont un moyen de rechercher, extraire ou remplacer des expressions
dans une chaîne de caractères.
Exemple d'utilisation : Les expressions régulières peuvent servir à vérifier la syntaxe de données
entrées par l'utilisateur dans un formulaire : le numéro de téléphone comporte bien 10 chiffres,
l'adresse e-mail a la bonne syntaxe...
Caractères spéciaux
Expressions régulières
Classes de caractères: groupement de caractères placés entre crochets
Nom_prenom
prenom
Nom_prenom_date.pdf
Date
Nomprenom.pdf
Présentation de quelques modules
importants de la bibliothèque standard.
datetime
os, shutil
sqlite3
Pickle (sérialisation)
Csv
Dom
Datetime
Module python standard pour gérer des objet de type datetime
def calculerAge(dateNaissance):
today = date.today()
anniversaire = dateNaissance.replace(year=today.year)
if anniversaire > today:
return today.year - dateNaissance.year - 1
else:
return today.year - dateNaissance.year
print calculerAge(date(1980,2,29))
Pickle
Persistance d’objet
exo_pickle.py Test_pickle.p exo_depickle.py
try:
# bloc à essayer
except:
# bloc qui sera exécuté en cas d'erreur
Exemple :
try :
nombre = input("Entrez un nombre : ")
nombre = int(nombre)
print("Vous avez bien tapé un nombre !")
except :
print("Vous auriez dû taper un nombre...")
try:
instructions
except typeException :
instructions2
try:
resultat = numerateur / denominateur
except NameError:
print(*La variable numerateur ou denominateur n'a pas été définie.')
except TypeError:
print("La variable numerateur ou denominateur possède un type
incompatible avec la division.')
except ZeroDivisionError:
print(*La variable denominateur est égale à O.‘)
Préciser le type d’exception
Autres syntaxes possibles
Il est possible d'effectuer les même instructions pour plusieurs types d'exceptions.
try:
resultat = numerateur / denominateur
except ZeroDivisionError:
print("La variable denominateur est égale à O.")
except (NameError.TypeError) :
print("Une erreur est survenue.")
Si vous ne connaissez pas toutes les exceptions possibles, alors le dernier bloc except ne doit pas
contenir de type d'exception
try:
resultat = numerateur / denominateur
except NameError:
print("La variable numerateur ou denominateur n'a pas été définie.")
except ZeroDivisionError:
print("La variable denominateur est égale à O.")
except : print("Une erreur est survenue.")
try:
resultat = numerateur / denominateur
except NameError :
print("La variable numerateur ou denominateur n'a pas été définie.")
except ZeroDivisionError:
print("la variable denominateur est égale à O.")
else:
print("le résultat obtenu est: ", resultat)
Mot clé finally
Le mot clé finally permet d'exécuter du code après un bloc try, dans tous les cas de
figure, quelle que soit l'exécution du bloc try. Même s'il existe une instruction return
dans votre bloc except par exemple, le bloc finally sera exécuté.
try:
resultat = numerateur / denominateur
except ZeraivisionError:
print("La variable denominateur est égale à 0.")
else:
print("Le résultat obtenu est", resultat)
finally:
print("Fin du programme ! ")
Mot clé pass
Imaginons que vous souhaitiez tester un bloc d'instructiorts mais ne faire aucune
action lorsque ce bloc amène une erreur. Ceci pose un problème car un bloc try ne
peut pas exister sans au moins un bloc except.
Il existe alors un mot clé pass qui permet de gérer ce problème, il est utilisé avec la
syntaxe suivante :
try:
# test d'instruction(s)
except type_de_l_exception:
pass # rien ne doit se passer en cas d'erreur
Ce mot clé permet de passer le bloc except sans effectuer aucune action.
Le mot clé pass n'est pas propre aux exceptions, il peut aussi être utilisé dans des
conditions, ou dans des fonctions que vous voulez laisser vide
Exemple : try:
fsock = open(filename, "rb", 0)
try:
fsock.seek(-128, 2)
tagdata = fsock.read(128)
finally:
fsock.close()
except IOError:
pass
Les assertions
Les assertions sont un moyen simple de s'assurer qu'une condition est respectée avant de
poursuivre l'exécution du programme.
En général, les assertions sont utilisées dans des blocs try except. Pour écrire une assertion, il faut
utiliser le mot clé assert suivi d'une expression qui renvoie True ou False. Si l'expression renvoie
faux, rien ne se pages, sinon un exception AssertionError est levée.
Exemple:
var = 5
assert var == 5
assert var == 8 # Renvoie une exception AssertionError
Les assertions permettent de lever des erreurs là où Python n'en trouve pas lui même. Par
exemple, l'utilisateur doit entrer une année, il est préférable de s'assurer que celle-ci n'est pas
négative :
Exemple :
class MonException(Exception):
pass
try:
raise MonException("Mon message d'erreur")
except MonException, (instance):
print "Le message d'erreur : " + instance.message
Application : calcul d’âge
Dans la classe Personne prendre en compte les
années bissextiles en utilisant les exceptions
Dans la class STR : interdire l’opération de
multiplication par un entier
Importation de module
Création IHM
Principes de programmation des interfaces
graphiques.
Une interface graphique est un dispositif de dialogue Homme-Machine (au même titre
qu’une console)
Les éléments
Fenêtres
Conteneurs
Widgets (outils)
Evénements (équivalent de commande en console)
Souris
Clavier
Présentation de la bibliothèque wxPython.
WxWidgets
Bibliothèque graphique libre
Multi-plateforme
S’adapte à l’environement
Ecrire en C++
WxPthon : binding vers WxWidgets
Particulièrement complète
N’existe pas en Python3, en développement
Dispose d’une interface de démo
wysiwyg
Une fenêtre
Premier pas
#!/usr/bin/python
# simple.py
import wx
app = wx.App()
frame = wx.Frame(None, -1, 'simple.py')
frame.Show()
app.MainLoop()
Un outil:
Présentation graphique
Capture d’événement
Méthode en cas de capture
Menu
import wx
class Example(wx.Frame):
def __init__(self, parent,id,title,newsize):
super(Example, self).__init__(parent,id,title,size=newsize)
menubar = wx.MenuBar()
fileMenu = wx.Menu()
fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
menubar.Append(fileMenu, '&File')
self.SetMenuBar(menubar)
self.Bind(wx.EVT_MENU, self.OnQuit, fitem)
self.SetSize((300, 200))
self.SetTitle('Simple menu')
self.Centre()
self.Show(True)
if __name__ == '__main__':
ex = wx.App()
Example(None,-1,’ma fenetre’, (500,300))
ex.MainLoop()
Sous menu
imp = wx.Menu()
imp.Append(wx.ID_ANY, 'Import newsfeed list...')
imp.Append(wx.ID_ANY, 'Import bookmarks...')
imp.Append(wx.ID_ANY, 'Import mail...')
fileMenu.AppendMenu(wx.ID_ANY, 'I&mport', imp)
Toolbar
import wx
class Example(wx.Frame):
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
Conteneur wx.Panel
Ajouter un conteneur au code de la Frame
panel = wx.Panel(self, -1)
wx.TextCtrl(self, pos=(30, 3), size=(120, 20))
cb.Bind(wx.EVT_COMBOBOX, self.OnSelect)
i = e.GetString()
self.st.SetLabel(i)
wx.CheckBox
cb.Bind(wx.EVT_CHECKBOX, self.ShowOrHideTitle)
wx.StatusBar
self.sb = self.CreateStatusBar()
wx.RadioButton
self.rb1.Bind(wx.EVT_RADIOBUTTON, self.SetVal)
self.rb2.Bind(wx.EVT_RADIOBUTTON, self.SetVal)
self.rb3.Bind(wx.EVT_RADIOBUTTON, self.SetVal)
state1 = str(self.rb1.GetValue())
state2 = str(self.rb2.GetValue())
state3 = str(self.rb3.GetValue())
self.sb.SetStatusText(state1, 0)
self.sb.SetStatusText(state2, 1)
self.sb.SetStatusText(state3, 2)
wx.Gauge
self.gauge.SetValue(self.count)
Les sizers
Conteneur qui permet de calibrer les widgets
wx.BoxSizer
wx.StaticBoxSizer
wx.GridSizer
wx.FlexGridSizer
wx.GridBagSizer
wx.BoxSizer
Ce sizer permet de mettre plusieurs widgets dans
une ligne ou une colonne. Nous pouvons mettre un
sizer dans un sizerexistant. De cette façon, nous
pouvons créer des modèles très complexes.
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(bouton, 1, wx.EXPAND | wx.ALL, 20)
Vbox.Add(self.st)
self.SetSizer(vbox) )
wx.GridSizer
Le wx.GridSizer
permet de créer des
widgets dans une
table à 2 dimentions.
Chaque cellule dans
la table a la même
taille.
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(bouton, 1, wx.EXPAND | wx.ALL, 20)
Vbox.Add(self.st)
self.SetSizer(vbox) )
gs=wx.GridSizer(ligne, colonne)
gs.AddMany( [(wx.Button(self, label='Cls'), 0, wx.EXPAND),
(wx.Button(self, label='Bck'), 0, wx.EXPAND),
(wx.StaticText(self), wx.EXPAND),
(wx.Button(self, label='Close'), 0, wx.EXPAND)])
vbox.Add(gs, proportion=1, flag=wx.EXPAND)
self.SetSizer(gs)
Application : Calculatrice
Boutons: 0 à 9, C et ‘=‘, x, …
Self.Fit() : center et retirer espace d’un fenêtre
Wx.BoxSizer(vertical)
evt.GetEventObject().GetLabel()
Wx.Gridsizer
Eval(chaine)->effectue le calcul contenu dans chaine
import wx def OnButton(self, evt):
import math vbtn = evt.GetEventObject().GetLabel() # la valeur du bouton
class Calculatrice(wx.Frame): if vbtn == "=": # calcul
def __init__(self):
chaine = self.barresaisi.GetValue()
wx.Frame.__init__(self, None, -1, "Calculatrice basic")
# ignorer lorsque la chaine est vide
sizer = wx.BoxSizer(wx.VERTICAL)
if not chaine.strip():
return
self.barresaisi = wx.TextCtrl(self, -1) # barre d'affichage
# on effectue le calcul
sizer.Add(self.barresaisi, 0, wx.EXPAND) # ajout barre affichage a
sizer if chaine[:3]=='rac':
gsizer = wx.GridSizer(5,4) # un sizer de type tableau pour contenir les result = eval(str(math.sqrt(float(chaine[3:]))))
boutons autre que =
else:
for ligne in ["7", "8", "9", "./’ ,"4", "5", "6", "*,"1", "2", "3", "-’ ,"0", ".", "C",
"+’ ,"rac", "**", "", ""]: result = eval(chaine)
for ele in ligne: # Show result
btn = wx.Button(self, -1, ele) self.barresaisi.SetValue(str(result))
gsizer.Add(btn) elif vbtn == "C": # effacer
self.Bind(wx.EVT_BUTTON, self.OnButton, btn) self.barresaisi.SetValue("")
sizer.Add(gsizer, 1, wx.EXPAND)
# bouton egale
else: # ajout chaine dans la barre de saisie
btnegal = wx.Button(self, -1, "=")
self.barresaisi.SetValue(self.barresaisi.GetValue() + vbtn)
self.Bind(wx.EVT_BUTTON, self.OnButton, btnegal)
self.equal.SetFocus() # Set the [=] button in focus
sizer.Add(btnegal, 0, wx.EXPAND)
self.equal = btnegal
if __name__ == "__main__":
# ajout sizer
# Run the application
self.SetSizer(sizer)
# retrait espace app = wx.App()
ajouter(a, b)
Ajoute deux nombres l'un à l'autre et retourne
le résultat.
def methode(self):
"""
Retourne un objet univers, prêt
à être impitoyable.
"""
pass
Module
"""Ceci est la documentation de mon module"""
class MaClasse(object):
"""
Ceci est une documentation de ma classe
"""
def methode(self):
"""
Retourne un objet univers, prêt
à être impitoyable.
"""
pass
Documentation avec PyDoc
Pydoc :Module python pour générer automatiquement de la documentation en ligne
Exemple
def testcarre():
for x, r in {0:0,1:1,-2:4}.items():
if carre(x) !=r:
print 'erreur de test: la valeur attendue pour le carre de %d\
est %d. la valeur retournee est %d' %(x,r,carre(x))
break
else:
print 'test reussi'
Tests unitaires avec DocTest
Doctest : module Python qui utilise la docstring pour définir des tests
Syntaxe:
Dans le corps du module ou dans la fonction à tester
Dans la docstring
"""
…
>>> carre(2)
4
>>> [carre(long(n)) for n in range(6)]
[0,1,4,9,16,25]
…
"""
Appel
if __name__ == "__main__":
import doctest
doctest.testmod()
""" >>> factorial(30.1)
This is the "example" module. Traceback (most recent call last):
...
The example module supplies one function, factorial(). For ValueError: n must be exact integer
example,
>>> factorial(30.0)
265252859812191058636308480000000L
>>> factorial(5)
120
It must also not be ridiculously large:
"""
>>> factorial(1e100)
Traceback (most recent call last):
def factorial(n):
...
"""Return the factorial of n, an exact integer >= 0.
OverflowError: n too large
"""
If the result is small enough to fit in an int, return an
int.
Else return a long. import math
if not n >= 0:
265252859812191058636308480000000L result = 1
NB : Les modules qui sont prévus pour être utilisés via "from M import *" devraient préfixer leurs
variables globales (et leurs fonctions et classes internes) avec un souligné, pour empêcher leur
exportation.
Structuration projet
Nommage : des nom de variables, classes et fonctions/méthodes implicites
Éviter from module import * , utiliser plutôt from module import e1,e2,e3,
mieux encore import module
_VAR pour les variables globales non importées
Éviter l’usage du typage dynamique:
A=0
A=‘chaine’
Les Modules de Python
Philosophie Python avec les modules
(standard, tiers)
Built-in Modules:
>>import sys
>>sys.builtin_module_names
Modules standard : https://docs.python.org/2.7/py-
modindex.html
Les modules os et subprocess (survol)
os subprocess
Diverses interfaces de système d'exploitation Diverses interfaces de système d'exploitation
– bas niveau – haut niveau
module vous permet de frayer de nouveaux
Ce module fournit un moyen d'utiliser la procédés, connectez à leurs tuyaux d'entrée /
fonctionnalité portable dépendant du système sortie / erreur, et d'obtenir leurs codes de
d'exploitation retour.
Exemple utilisation: Ce module remplace plusieurs anciens
modules et fonctions:
import os os.system
os.popen(commande) os.spawn*
os.popen*
popen2.*
commands.*
Exemple utilisation
Import subprocess
subprocess.Popen(commande)
subprocess.call(commande)
Le module threading (survol)
Ce module fournit des primitives de haut niveau pour travailler avec plusieurs threads
Exemple:
threading.current_thread() : retourne le thread courant
threading.enumerate() : retourne les threads en vie
threading.active_count() : compte le nombre de threads en vie