Applications avec Sqlite Database, PyQT et QT Desginer

Table des matières
Il existe d'autres API pour pouvoir créer des applications GUI en Python comme par exemple Concepteur QT qui vous permet de créer de belles interfaces visuelles, puis à travers les bibliothèques PyQt de générer automatiquement le code nécessaire des interfaces en Python avec la commande pyuique, Qu'est-ce qu'un Compilateur d'interface utilisateur pour QT ce qui vient avec Paquet PyQt.

Le tutoriel Applications multiplateformes avec Python, PyQT et QT Desginer 5, nous avions commencé à installer et configurer python, pyqt et qt Designate dans ce tutoriel nous utiliserons PyQT 4 pour des raisons de stabilité, il peut également être utilisé avec les bibliothèques PyQt 5 .
Dans ce tutoriel, nous allons créer une application visuelle pour connecter une base de données Sqlite 3 et définir les fonctions pour enregistrer et afficher les données.
Nous allons commencer par créer la base de données en Sqlite pour cela nous pouvons utiliser le logiciel Sqliteman qui peut être utilisé dans n'importe quel système d'exploitation. Nous pouvons le télécharger et l'installer pour pouvoir gérer les bases de données Sqlite version 3.

Depuis le site officiel, nous pouvons télécharger la version du système d'exploitation qui nous convient pour notre développement.

Ensuite, nous démarrons Sqliteman et allons au menu Fichier> Nouveau fichier et nous créons notre base de données dbproducts.db.
Ensuite, nous allons au menu Contexte> Créer une table et nous créons la table des produits.

Le code SQL peut être obtenu à partir du même logiciel en faisant un clic droit sur le nom de la table et en utilisant l'option Décrire la table, le code résultant sera le suivant :
 CREATE TABLE products (TEXT NOT NULL code, TEXT NOT NULL product, TEXT NOT NULL quantité, TEXT NOT NULL price)
Pour programmer en Python, nous utiliserons NetBeans dans ce tutoriel, nous aurons besoin d'un plugin que nous pouvons télécharger depuis le site Web Netbeans Plugins.

Nous téléchargeons le fichier, nous le décompressons, dans le dossier nous aurons tous les fichiers et dépendances à ajouter à NetBeans.

Ensuite, nous ouvrons le programme Netbeans, nous aurons besoin de la version 8.0.2 et allons dans le menu Outils> Plugin, puis nous allons dans l'onglet Téléchargé et une boîte de dialogue s'ouvrira où nous sélectionnerons tous les plugins que nous téléchargeons avec la clé :

Maj +

Ensuite, nous cliquerons sur le bouton Installer pour activer le plugin, puis nous redémarrerons NetBeans.

Ensuite, nous ouvrons NetBeans et allons au menu Fichier> Nouveau projet et Nous sélectionnons l'option Python puis Python Project.

Ensuite, nous attribuerons un nom à notre projet et la version de python qui exécutera le code, en l'occurrence la version 2.7.6.

Maintenant que nous avons créé le projet, nous allons créer l'interface pour cela, nous allons dans Qt designer et nous allons créer l'écran suivant

Nous allons d'abord créer le projet Qt Designer, aller dans le menu Fichier> Nouveau projet et sélectionner le type d'écran que nous allons utiliser, ce sera la fenêtre principale.

Ensuite, nous mettrons 4 widget Label, si nous ne pouvons pas le trouver dans la boîte de widget à gauche, nous devrons le rechercher.

Dans la boîte de propriétés à droite, nous devons attribuer à chacun son nom respectif puis l'identifier, avec les conventions de code, nous aurions les noms suivants lblCode, lblProduit, lbl Quantité Oui lblPrix.
Nous avons de nombreuses propriétés pour configurer chaque élément mais dans ce tutoriel nous utiliserons les plus basiques. Nous allons donc prendre chaque étiquette et la faire glisser sur l'écran pour la laisser dans la position souhaitée.
Ensuite, nous mettrons les zones de texte ou LineEdit, à chacune nous attribuons un nom txtCode, txtProduit, txt Quantité, txtPrix. Ce seront les champs de la base de données avec ces zones de texte nous entrerons des données que nous enregistrerons ensuite.
Ensuite, nous mettrons 2 Bouton ou des boutons un sera btEnregistrer pour insérer des données dans la base de données et d'autres btMise à jour pour mettre à jour une liste de données.
Ensuite, nous ajouterons un tableWidget que nous devrons également rechercher dans la colonne de gauche, nous le faisons glisser vers l'écran et le nommons liste de produits tbl.
Ensuite, nous enregistrons le fichier sous productlist.ui. dans le dossier où se trouve le projet que nous avons créé avec netbeans.
Nous ouvrons une fenêtre de terminal pour convertir le fichier de Liste de produits QT.ui en python à l'aide de la commande suivante :
 puic4 liste de produits.ui> liste de produits.py
Le code Python de la conception sera le suivant
 # - * - codage : utf-8 - * - # Implémentation de formulaire générée à partir de la lecture du fichier d'interface utilisateur 'productlist.ui' # # Créé : 1er novembre 18:03:40 2015 # par : générateur de code d'interface utilisateur PyQt4 4.10.4 # # ATTENTION! Toutes les modifications apportées dans ce fichier seront perdues! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 sauf AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui (contexte, retour, déplacement.Guitext translate (context, text, disambig, _encoding) sauf AttributeError : def _translate (context, text, disambig) : return QtGui.QApplication.translate (context, text, disambig) class Ui_UIProducts (object) : def setupUi (self, UIProducts) : UIProducts.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497, 374) self.centralwidget = QtGui.QWidget (UIProducts) self.centralwidget.setObjectName (_fromUtf8 ("centralwidgetGuiCodigo") self.lQLablidgetbliqcentraliCodigo self.lQLablidgetLaqcentralligo) self.lblCodigo.setGeometry (QtCore.QRect (20, 16, 56, 17)) self.lblCodigo.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblCodigo.setTextFormat (QtCore.Qt ).PlainText (QtCore.Qt ).PlainText (QtCore.Qt ).PlainText self.lblCodigo.setObjectName (_fromUtf8 ("lblCodigo")) self.lblPrice = QtGui.QLabel (self.centralwidget) self.lblPrice.setGeo metry (QtCore.QRect (260, 40, 56, 17)) self.lblPrice.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblPrice.setObjectName (_fromUtf8 ("lblPrice")) self.lblQuantity = QtGui.QLabel (self.centralwidget) self.lblAmount.setGeometry (QtCore.QRect (20, 46, 56, 17)) self.lblAmount.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblAmount.setObjectName (_fromUtf8 ("lbljectName ( _fromUtf8 (" lbljectCan) )) self.txtCode = QtGui.QLineEdit (self.centralwidget) self.txtCode.setGeometry (QtCore.QRect (90, 10, 113, 27)) self.txtCodigo.setObjectName (_fromUtf8 ("txtCodigo") ) self.txtPrice = QtGui.QLineEdit (self.centralwidget) self.txtPrice.setGeometry (QtCore.QRect (340, 40, 113, 27)) self.txtPrice.setObjectName (_fromUtf8 ("txtPrice")) self.txtQuantity = QtGui .QLineEdit (self.centralwidget) self.txtAmount.setGeometry (QtCore.QRect (90, 40, 113, 27)) self.txtAmount.setObjectName (_fromUtf8 ("txtAmount")) self.line = QtGui.QFrame (self.centralwidget) ) self.line.setGeometry (QtCore.QRect (20, 110, 461, 16)) self.line.setFrameShape ( QtGui.QFrame.HLine) self.line.setFrameShadow (QtGui.QFrame.Sunken) self.line.setObjectName (_fromUtf8 ("line")) self.btSave = QtGui.QPushButton (self.centralwidget) self.btCoretry (QtGetry) self .btCoretry (QtGetry) .QRect (140, 80, 91, 27)) self.btSave.setMinimumSize (QtCore.QSize (91, 0)) self.btSave.setObjectName (_fromUtf8 ("btSave")) self.btUpdate = QtGui .QPush .Button (self. centralwidget) self.btUpdate.setGeometry (QtCore.QRect (250, 80, 101, 27)) self.btUpdate.setMinimumSize (QtCore.QSize (101, 0)) self.btUpdate.setObjectName (_fromUtf8 ("") selfActualize .label = QtGui.QLabel (self.centralwidget) self.label.setGeometry (QtCore.QRect (190, 130, 121, 17)) self.label.setObjectName (_fromUtf8 ("label")) self.lblProduct = QtGui.QLabel (self.centralwidget) self.lblProduct.setGeometry (QtCore.QRect (260, 10, 56, 21)) self.lblProducto.setMaximumSize (QtCore.QSize (16777215, 21)) self.lblProduct.setObjectName (_fromUtf8 ("lblProduct" )) self.txtProduct = QtGui.QLineEdit (self.centralwidget) self.txtP product.setGeometry (QtCore.QRect (340, 10, 113, 27)) self.txtProduct.setObjectName (_fromUtf8 ("txtProduct")) self.tableWidget = QtGui.QTableWidget (self.centralwidget) self.tableWidget.setGeometry (QtCore. QRect (10, 170, 471, 131)) self.tableWidget.setWordWrap (True) self.tableWidget.setObjectName (_fromUtf8 ("tableWidget")) self.tableWidget.setColumnCount (0) self.tableWidget.setRowCount (0) UIProducts. setCentralWidget (self.centralwidget) self.menubar = QtGui.QMenuBar (UIProducts) self.menubar.setGeometry (QtCore.QRect (0, 0, 497, 27)) self.menubar.setObjectName (_fromUtf8 ("menubarductos").) setMenuBar (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBrojectConnectUi (UIProctBrojectBrojectBrojectName,UIProjectName) UI : UIProducts.setWindowTitle (_translate ("UIProducts", "Product List", None)) self.lblCodigo.setText (_translate ("U IProducts "," Code ", Aucun)) self.lblPrice.setText (_translate (" IProducts "," Prix ", Aucun)) self.lblQuantity.setText (_translate (" UIProducts "," Quantité ", Aucun)) self. btSave.setText (_translate ("UIProducts", "Save", None)) self.btUpdate.setText (_translate ("UIProducts", "Update List", None)) self.label.setText (_translate ("UIProducts", " Liste des produits ", Aucun)) self.lblProducto.setText (_translate (" UIProductos "," Produit ", Aucun)) self.tableWidget.setSortingEnabled (True)
Ensuite, nous allons créer un autre fichier pour la fonctionnalité de conception définie dans le précédent :
 depuis PyQt4 import QtCore depuis PyQt4 import QtGui depuis PyQt4.QtCore import * depuis PyQt4.QtGui import * depuis la liste de produits import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init __ (self.it parent = None). (self, parent) self.ui = Ui_FrmProducts () self.ui.setupUi (self) self.ui.btSave.clicked.connect (self.Save_click) self.ui.btUpdate.clicked.connect (self.Update_click) self . Start Database () self.conn = None self.cursor = None # Nous démarrons la base de données et créons la table si elle n'existe pas def Start Database (self): self.conn = sqlite3.connect ("dbproducts.bd") curseur = self .conn.cursor () cursor.execute ("" "CREATE TABLE IF NOT EXISTS products (TEXT NOT NULL code, TEXT NOT NULL product, TEXT NOT NULL quantité, TEXT NOT NULL price)" "") def Save_click (self ): conn = sqlite3.connect ("dbproducts.bd") curseur = conn.cursor () self.code = str (self.ui.txtTextCode ()) self.product = str (self.ui.txtProduct.text) ()) self.quantity = str (self.ui.txtAmount.text ()) self.price = str (self.ui.txtPrice.text ()) self.register = (self.code, self.product, self. quantité, self.price) cursor.execute ("INSERT INTO products (code, product, Quantity, price) VALUES (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Enregistrement enregistré", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") curseur = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Les données indiquées sont chargées à partir de la table curseur.execute ("SELECT code, produit, quantité, prix FROM produits") table_info = cursor.fetchall () string_list = QStringList () database_table_column_count = 4 database_table_columns = {} database_table_items = [] self.ui.tableWidget.setColumnCount (database_table_column_count) self.number of rows = len (table_info) self.ui.tableCountWidget.setRowCount (self.setRowerode) numberoffi rows [0print)] for j in range (self.number of rows): row = table_info [j] affiche j pour i dans la plage (0, len (ligne)) : élément = ligne [i] affiche l'élément élément = str (élément) newitem = QTableWidgetItem (élément) self.ui.tableWidget.setItem (j, i , newitem) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) myapp = FrmProducts () myapp.show () sys.exit (app.exec_ ())
Le résultat lors de l'exécution du code sera le suivant :

Avez-vous aimé et aidé ce tutoriel ?Vous pouvez récompenser l'auteur en appuyant sur ce bouton pour lui donner un point positif

Vous contribuerez au développement du site, partager la page avec vos amis

wave wave wave wave wave