SI4 – LES BASES DE LA PROGRAMMATION Python - Sn

publicité
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Python
L’objectif de l’activité est de créer une application qui va se connecter à une base de données contenant
des relevés météorologiques au format SQL grâce au moteur SQLite.
Seuls, les utilisateurs préalablement authentifiés pourront utiliser l’application ; une boîte de dialogue
permettra de s’identifier afin d’accéder à l’application et autoriser la connexion à la base.
Lorsque la connexion est réalisée, vous pourrez choisir d’extraire certaines données et de les afficher sur
la fenêtre principale, dans un tableau.
Remarque :
La bibliothèque standard de Python inclut un moteur de
nommé SQLite.
base de données relationnelles performant
SQLite est le plus utilisé au monde. Il est notamment utilisé dans de nombreux logiciels grand public
comme FireFox, Skype, Google Gears, dans certains produits d’Apple, d’Adobe et de McAfee et dans des
bibliothèques standard de nombreux langages comme PHP ou Python. Il est également très populaire sur
les systèmes embarqués, notamment sur la plupart des smartphones modernes. Il s’agit d’un produit
entièrement gratuit et libre de droits. (Source : apprendre à programmer avec Python3 de Gérard
Swinnen).
SQLite mémorise toutes les tables d’une base de données dans un seul fichier multi-plate-forme. Le fichier
que vous aurez à utiliser dans ce TP est « oregon.sq3 ».
Attention 
a)
Vous aurez à importer le module sqlite3 dans votre application!
Vous pourrez mettre votre fichier « oregon.sq3 » où vous voulez sur le PC à condition de le
spécifier dans le programme:
Exemple :
fichier = ‘’C:/python33/oregon.sq3’’
b) Il faut créer ensuite un objet-connexion à l’aide de la fonction connect() qui assurera l’interface
entre le programme et la base de données.
Exemple :
connex = sqlite3.connect(fichier)
c) On utilise ensuite un objet-curseur , tampon intermédiaire destiné à mémoriser temporairement les
données en cours de traitement et les opérations effectuées avant le transfert définitif.
Exemple :
d) Le transfert dans la base s’effectue par :
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
cur = connex.cursor()
connex.commit()
1
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Python
Voici un exemple d’interface simple que vous pourrez arranger et améliorer par la suite.
Il s’agit d’un MainWindow avec menu :
-
Créer un répertoire dans Python33 qui s’appelle « AppliMeteoSql ».
Vous enregistrerez les fichiers de l’application à l‘intérieur.
Ouvrir QtDesigner.
Dans la fenêtre de dialogue, choisir MainWindow et cliquer sur créer. On obtient
l’interface Qt avec une fenêtre vide.
-
Enregistrer le projet dans le répertoire créé précédemment sous le nom
« FenetrePrincipale.ui ».
-
Modifier le titre de la fenêtre dans l’éditeur de propriétés sur la droite et trouvez la
propriété « WindowTitle » de la classe Qwidget. Mettre « Application Météo ». Faire
« Entrer ».
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
2
BTS SIO
-
SI4 – LES BASES DE LA PROGRAMMATION
Python
L’étape suivante consiste à placer des widgets de sorte que l’on se retrouve avec cette
fenêtre :
Label
Combo Box
Group Box
Table Widget
Ajout des colonnes et noms :
-
Clic droit sur la fenêtre Table Widget et « Editer les éléments ».
Largeur des colonnes:
Dans l’éditeur de propriétés :
-
Onglet « Header », propriété « horizontalHeaderDefaultSectionSize » à diminuer.
Ajout des lignes:
Dans l’éditeur de propriétés :
-
onglet « QTableWidget » et propriété rowCount à 50.
Ajout du menu déroulant (en haut à gauche) :
-
Double-cliquer sur le nom et noter « identification », puis sous-menu « Connexion Base ».
Modification des noms de widgets :
-
Chaque widget doit avoir son propre nom pour mieux les utiliser dans votre programme
Procéder à ces modifications.
Enregistrer votre travail et fermer QtDesigner.
N’oubliez pas d’éditer les « Combo Box » (mois, année, jour)
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
3
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Python
-
Ce fichier doit maintenant être « converti » en langage Python. Nous allons créer un
fichier nommé « ui_FenetrePrincipale.py » de la manière suivante :
-
Ouvrir la fenêtre de commande DOS (cmd).
-
Vérifiez avec la commande « DIR » que votre fichier « FenetrePrincipale.ui » s’ y trouve.
Puis entrez la commande suivante :
pyuic5 –o ui_FenetrePrincipale.py –x
FenetrePrincipale.ui
Faire « entrer » ; il ne doit pas y avoir de message particulier. Fermer la fenêtre.
-
L’étape suivante va consister à créer le programme principal indépendant de la partie
programme de l’interface graphique (ceci est alors plus simple lorsqu’il faut changer des
éléments de cette interface).
Pour cela, créer un nouveau fichier « FenetrePrincipaleMain.py » puis insérer les lignes
suivantes nécessaires pour afficher la fenêtre graphique.
# --- importation des modules utiles --from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import os,sys
Importer la classe
graphique
from ui_FenetrePrincipale import *
# classe principale:
Mettre le nom donné
dans Qt designer
class myApp(QMainWindow, Ui_FenetrePrincipale):
def __init__(self, parent=None):
QMainWindow.__init__(self)
self.setupUi(parent)
# fonction principale exécutant l'application Qt
def main(args):
a=QApplication(args) # crée l'objet application
f=QMainWindow()
c=myApp(f) # appelle la classe contenant le code de l'application
f.show() # affiche la fenêtre QMainWindow
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
4
BTS SIO
SI4 – LES BASES DE LA PROGRAMMATION
Python
r=a.exec_() # lance l'exécution de l'application
return r
# pour rendre le fichier *.py exécutable
if __name__=="__main__": # pour rendre le code exécutable
main(sys.argv) # appelle la fonction main
-
Lancer l’exécution de ce programme (F5) et vérifier que l’interface apparaît sans erreur.
Fermer le programme.
La 2ème partie du travail va consister à compléter le programme principal pour se connecter à la
base et afficher les données dans le tableau selon votre sélection.
Pour cela, je vous propose de créer 2 méthodes :
-
executerRequete(self)
qui sera appelée lorsque les combo Box de choix seront utilisés.
-
ecrireTable(self,don) qui sera appelée par la précédente méthode. On peut s’en passer mais
cela permet de manipuler les méthodes.
L’instruction qui permet de réagir à une action d’un combo Box est de la forme suivante :
self.comboBox.currentIndexChanged.connect(self.executerRequete)
« currentIndexChanged » est
appelé le signal et la
méthode
« self.executerRequete() »
est appelé le slot
L’instruction qui permet de lire le contenu d’un Combo Box (un item) est de la forme suivante:
self.comboBox.currentText()
L’instruction qui permet d’effacer le contenu d’une table Widget est de la forme :
self.tableWidget.clearContents()
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
5
SI4 – LES BASES DE LA PROGRAMMATION
Python
BTS SIO
Connexion à la base « oregon.sq3 » et à la table »oregon2 » et affichage :
Le début du TP indique les instructions nécessaires à la connexion.
Pour les données à récupérer, vous allez utiliser la méthode fetchall() qui permet d’obtenir une variable
liste constituée de tuples (les tuples sont les enregistrements de la table).
Exemple :
self.cur.fetchall()
[(2012, 2, 1, 0, 0, 0.9, 18.4, 73, 43, 1013), (2012, 2, 1, 0, 30, 2.2, 18.4, 81, 43, 1013), (2012, 2, 1, 1, 0, 2.4,
18.4, 87, 43, 1013), (2012, 2, 1, 1, 30, 1.6, 18.4, 76, 43, 1013)..........]
est une variable contenant des tuples (enregistrements). Les données des tuples ne peuvent pas être
modifiées par le programme (lecture seule).
Pour parcourir l’ensemble des données de chaque tuple pour les répartir ensuite dans le tableau, on peut
utiliser 2 boucles imbriquées dans la méthode « ecrireTable(self,don) »:
i=0
for tup in don:
#chaque tuple est parcouru indépendamment
ind=0
for element in tup:
#chaque variable du tuple parcouru est lu
item = QtWidgets.QTableWidgetItem(str(element))
self.tableWidgetDonnees.setItem(i,ind,item)
#et est placé au bon endroit dans le tableau
ind+=1
i+=1
Remarque : ne pas hésiter à insérer des print() dans les boucles pour visualiser les variables !
La 3ème partie du travail va consister à créer la boîte de dialogue de connexion et de l’insérer dans
le programme principal.
On utilisera l’instruction :
self.actionConnexion_Base.triggered.connect(self.connecter)
Le signal est triggered et le slot est self.connecter().
self.groupBoxChoix.setEnabled(False) est l’instruction qui permet de « griser », donc de rendre
inutilisable le contenu de GroupBoxChoix.
A vous de continuer !
Lycée des Métiers Jacques Prévert
Combs – la – Ville
Section BTS Services Informatiques aux Organisations
6
Téléchargement