Aplicații cu baza de date Sqlite, PyQT și QT Desginer

Cuprins
Există și alte API-uri pe care le puteți face creați aplicații GUI în Python de exemplu Designer QT care vă permite să creați interfețe vizuale frumoase și apoi prin bibliotecile PyQt generați automat codul necesar al interfețelor din Python cu comanda pyuic, ce este un Compilator UI pentru QT ce vine cu el Pachetul PyQt.

Tutorialul Aplicații multi-platformă cu Python, PyQT și QT Desginer 5, am început cum să instalăm și să configurăm python, pyqt și qt Desemnați în acest tutorial vom folosi PyQT 4 din motive de stabilitate, poate fi folosit și cu bibliotecile PyQt 5 .
În acest tutorial vom crea o aplicație vizuală pentru a conecta o bază de date Sqlite 3 și a defini funcțiile de salvare și afișare a datelor.
Vom începe prin crearea bazei de date în Sqlite pentru aceasta putem folosi software-ul Sqliteman care poate fi utilizat în orice sistem de operare. Îl putem descărca și instala pentru a putea gestiona bazele de date Sqlite versiunea 3.

De pe site-ul oficial putem descărca versiunea pentru sistemul de operare care ne convine pentru dezvoltarea noastră.

Apoi începem Sqliteman și mergem la meniu Fișier> Fișier nou și ne creăm baza de date dbproducts.db.
Apoi mergem la meniu Context> Creați tabel și creăm tabelul cu produse.

Codul SQL poate fi obținut de la același software făcând clic dreapta pe numele tabelului și folosind opțiunea Descrie tabelul, codul rezultat va fi următorul:
 CREAȚI produse TABLE (cod TEXT NU NUL, produs TEXT NU NUL, cantitate TEXT NU NUL, preț TEXT NU NUL)
Pentru a programa în Python, vom folosi NetBeans în acest tutorial, vom avea nevoie de un plugin pe care îl putem descărca de pe site-ul Netbeans Plugins.

Descărcăm fișierul, îl dezarhivăm, în dosar vom avea toate fișierele și dependențele de adăugat la NetBeans.

Apoi deschidem programul Netbeans, vom avea nevoie de versiunea 8.0.2 și vom merge la meniu Instrumente> Plugin, apoi mergem la fila Descărcat și se va deschide o casetă de dialog în care vom selecta toate pluginurile pe care le descărcăm cu tasta:

Shift +

Apoi vom face clic pe butonul Instalare pentru a activa pluginul, apoi vom reporni NetBeans.

Apoi deschidem NetBeans și mergem la meniu Fișier> Proiect nou și Selectăm opțiunea Python și apoi Python Project.

Apoi vom atribui un nume proiectului nostru și versiunea python care va executa codul, în acest caz versiunea 2.7.6.

Acum că am creat proiectul, vom crea interfața pentru aceasta, mergem la Qt designer și vom crea următorul ecran

Mai întâi vom crea proiectul Qt Designer, vom accesa meniul Fișier> Proiect nou și vom selecta tipul de ecran pe care urmează să îl folosim, va fi fereastra principală.

Apoi vom pune 4 etichete widget, dacă nu o putem găsi în caseta widget din stânga va trebui să o căutăm.

În caseta de proprietăți din dreapta trebuie să le atribuim fiecăruia numele respectiv și apoi să îl identificăm, cu convențiile de cod am avea următoarele nume lblCode, lblProduct, lbl Cantitate Da lblPrice.
Avem multe proprietăți pentru a configura fiecare element, dar în acest tutorial le vom folosi pe cele mai elementare. Deci, vom lua fiecare etichetă și o vom trage pe ecran pentru a o lăsa în poziția dorită.
Apoi vom pune casetele de text sau LineEdit, fiecăruia îi atribuim un nume txtCode, txtProduct, txt Cantitate, txtPrice. Acestea vor fi câmpurile bazei de date cu aceste casete de text vom introduce date pe care apoi le vom salva.
În continuare vom pune 2 Apasa butonul sau butoane unul va fi btSave pentru a insera date în baza de date și altele btUpdate pentru a actualiza o listă de date.
Apoi vom adăuga un tableWidget că va trebui să căutăm și în coloana din stânga, o tragem pe ecran și o denumim lista de produse tbl.
Apoi salvăm fișierul ca productlist.ui. în folderul unde este proiectul cu care am creat fasole netă.
Deschidem o fereastră de terminal pentru a converti fișierul QT productlist.ui la python folosind următoarea comandă:
 puic4 productlist.ui> productlist.py
Codul Python al designului va fi după cum urmează
 . AVERTIZARE! Toate modificările făcute în acest fișier se vor pierde! din PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 exceptând AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui, context (return, context, return) traduce (context, text, dezambig, _encoding) cu excepția 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 ("centralwidod") 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 (_fromUtfod (" ) self.txtPrice = QtGui.QLineEdit (self.centralwidget) self.txtPrice.setGeometry (QtCore.QRect (340, 40, 113, 27)) self.txtPrice.setObjectName (_fromUtf8 ("txtPrice")) self.txtQuantity .QLineEdit (self. Centralwidget) self.txtAmount.setGeometry (QtCore.QRect (90, 40, 113, 27)) self.txtAmount.setObjectName (_fromUtf8 ("txtAmount")) self.line = QtGui.QFrame (self.centralwid ) 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) .btCoretry (QtGetry) .QRect (140, 80, 91, 27)) self.btSave.setMinimumSize (QtCore.QSize (91, 0)) self.btSave.setObjectName (_fromUtf8 ("btSave")) self.btUpdate = Qt .QPush .Button (self. Centralwidget) self.btUpdate.setGeometry (QtCore.QRect (250, 80, 101, 27)) self.btUpdate.setMinimumSize (QtCore.QSize (101, 0)) self.btUpdate.setObjectName (_fromUt (") 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.setObjectName8 (_fromUtf ("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.setGeT. QRect (10, 170, 471, 131)) self.tableWidget.setWordWrap (True) self.tableWidget.setObjectName (_fromUtf8 ("tableWidget")) self.tableWidget.setColumnCount (0) self.tableWidget.setRowCount (0) UIProd. setCentralWidget (self.centralwidget) self.menubar = QtGui.QMenuBar (UIProducts) self.menubar.setGeometry (QtCore.QRect (0, 0, 497, 27)) self.menubar.setObjectName (_fromUtf8 ("menubarductos"). (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBrojectConnectUrect : UIProducts.setWindowTitle (_translate ("UIProducts", "Lista produselor", None)) self.lblCodigo.setText (_translate ("U IProducts "," Code ", None)) self.lblPrice.setText (_translate (" IProducts "," Price ", None)) self.lblQuantity.setText (_translate (" UIProducts "," Quantity ", None)) self. btSave.setText (_translate ("UIProducts", "Save", None)) self.btUpdate.setText (_translate ("UIProducts", "Update List", None)) self.label.setText (_translate ("UIProducts", " Lista produselor ", None)) self.lblProducto.setText (_translate (" UIProductos "," Product ", None)) self.tableWidget.setSortingEnabled (True)
În continuare vom crea un alt fișier pentru funcționalitatea de proiectare definită în cea anterioară:
 din PyQt4 import QtCore din PyQt4 import QtGui din PyQt4.QtCore import * din PyQt4.QtGui import * din lista de produse import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init __ (self. 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 = Niciuna self.cursor = Niciuna # Începem baza de date și creăm tabelul dacă nu există Def Start Database (self): self.conn = sqlite3.connect ("dbproducts.bd") cursor = self .conn.cursor () cursor.execute ("" "CREAȚI TABELUL DACĂ NU EXISTĂ produse (cod TEXT NOT NULL, TEXT NOT NULL produs, TEXT NU NULL cantitate, TEXT NOT NULL preț)" "") def Save_click (self ): conn = sqlite3.connect ("dbproducts.bd") cursor = 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. cantitate, self.price) cursor.execute ("INSERT INTO products (cod, produs, cantitate, preț) VALORI (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Record saved", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Datele indicate sunt încărcate din tabel cursor.execute ("SELECT cod, produs, cantitate, preț DIN PRODUSE") 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 lines = len (table_info) self.ui.tableWidget.setRowCount (setRowCount) numberoffi rânduri [0print)] pentru j în interval (auto.număr de rânduri): rând = table_info [j] print j for i in range (0, len (row)): item = row [i] print item item = str (item) newitem = QTableWidgetItem (item) self.ui.tableWidget.setItem (j, i , element nou) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) myapp = FrmProducts () myapp.show () sys.exit (app.exec_ ())
Rezultatul la executarea codului va fi următorul:

V-a plăcut și ați ajutat acest tutorial?Puteți recompensa autorul apăsând acest buton pentru a-i oferi un punct pozitiv
wave wave wave wave wave