Toepassingen met Sqlite Database, PyQT en QT Desginer

Inhoudsopgave
Er zijn andere API's om te kunnen: maak GUI-applicaties in Python bijvoorbeeld QT-ontwerper waarmee je een mooi ogende visuele interface kunt maken en vervolgens via de PyQt-bibliotheken automatisch de benodigde code van de interfaces in Python kunt genereren met de opdracht pyuic, wat is een UI-compiler voor QT wat hoort erbij? PyQt-pakket.

De tutorial Cross-platform applicaties met Python, PyQT en QT Desginer 5, we waren begonnen met het installeren en configureren van python, pyqt en qt Designate in deze tutorial zullen we PyQT 4 gebruiken om stabiliteitsredenen, het kan ook worden gebruikt met PyQt 5-bibliotheken .
In deze tutorial zullen we een visuele applicatie maken om een ​​Sqlite 3-database te verbinden en de functies definiëren om gegevens op te slaan en weer te geven.
We beginnen met het maken van de database in Sqlite hiervoor kunnen we de Sqliteman-software gebruiken die in elk besturingssysteem kan worden gebruikt. We kunnen het downloaden en installeren om Sqlite versie 3-databases te kunnen beheren.

Van de officiële website kunnen we de versie downloaden voor het besturingssysteem dat bij ons past voor onze ontwikkeling.

Vervolgens starten we Sqliteman en gaan we naar het menu Bestand> Nieuw bestand en we creëren onze database dbproducten.db.
Dan gaan we naar het menu Context> Tabel maken en we maken de productentabel.

De SQL-code kan uit dezelfde software worden verkregen door met de rechtermuisknop op de tabelnaam te klikken en de optie Tabel beschrijven te gebruiken, de resulterende code is de volgende:
 MAAK TAFEL-producten (TEKST NIET NULL-code, TEKST NIET NULL-product, TEKST NIET NULL-hoeveelheid, TEKST NIET NULL-prijs)
Om in Python te programmeren, zullen we NetBeans gebruiken in deze tutorial, we hebben een plug-in nodig die we kunnen downloaden van de Netbeans Plugins-website.

We downloaden het bestand, we pakken het uit, in de map zullen we alle bestanden en afhankelijkheden hebben om toe te voegen aan NetBeans.

Dan openen we het Netbeans-programma, we hebben versie 8.0.2 nodig en gaan naar het menu Hulpmiddelen> Plug-in, dan gaan we naar het tabblad Gedownload en er wordt een dialoogvenster geopend waarin we alle plug-ins selecteren die we downloaden met de sleutel:

Shift +

Vervolgens klikken we op de knop Installeren om de plug-in te activeren, waarna we NetBeans opnieuw starten.

Vervolgens openen we NetBeans en gaan we naar het menu Bestand> Nieuw project en We selecteren de Python-optie en vervolgens Python Project.

Vervolgens zullen we een naam toewijzen aan ons project en de versie van python die de code zal uitvoeren, in dit geval versie 2.7.6.

Nu we het project hebben gemaakt, gaan we de interface maken hiervoor gaan we naar Qt designer en we zullen het volgende scherm maken

We zullen eerst het Qt Designer-project maken, naar het menu Bestand> Nieuw project gaan en het type scherm selecteren dat we gaan gebruiken, het zal Hoofdvenster zijn.

Dan zullen we 4 widgetlabels plaatsen, als we het niet in het widgetvak aan de linkerkant kunnen vinden, zullen we ernaar moeten zoeken.

In het eigenschappenvenster aan de rechterkant moeten we elk zijn respectieve naam toewijzen en vervolgens identificeren, met de codeconventies zouden we de volgende namen hebben lblCode, lblProduct, lbl Hoeveelheid Y lblPrijs.
We hebben veel eigenschappen om elk element te configureren, maar in deze tutorial zullen we de meest elementaire gebruiken. Dus we nemen elk label en slepen het naar het scherm om het op de gewenste positie te laten.
Vervolgens zullen we de tekstvakken of LineEdit plaatsen, aan elk geven we een naam txtCode, txtProduct, txt Hoeveelheid, txtPrijs. Dit zijn de velden van de database met deze tekstvakken zullen we gegevens invoeren die we vervolgens zullen opslaan.
Vervolgens plaatsen we 2 Druk op de knop of knoppen een zal zijn btOpslaan om gegevens in de database in te voegen en andere btUpdate om een ​​lijst met gegevens bij te werken.
Dan voegen we een toe tafelWidget die we ook in de linkerkolom zullen moeten zoeken, we slepen het naar het scherm en noemen het tbl producten lijst.
Vervolgens slaan we het bestand op als productlist.ui. in de map waar is het project waarmee we hebben gemaakt netbeans.
We openen een terminalvenster om het bestand te converteren van QT productlist.ui te python met behulp van de volgende opdracht:
 puic4 productlist.ui> productlist.py
De Python-code van het ontwerp is als volgt:
 # - * - codering: utf-8 - * - # Formulierimplementatie gegenereerd door het lezen van ui-bestand 'productlist.ui' # # Gemaakt: zo 1 november 18:03:40 2015 # door: PyQt4 UI-codegenerator 4.10.4 # # WAARSCHUWING! Alle wijzigingen in dit bestand gaan verloren! van PyQt4 import QtCore, QtGui probeer: _fromUtf8 = QtCore.QString.fromUtf8 behalve AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui, verplaatsing (return vertalen (context, tekst, ondubbelzinnig maken, _encoding) behalve AttributeError: def _translate (context, tekst, ondubbelzinnig): return QtGui.QApplication.translate (context, tekst, ondubbelzinnig maken) klasse Ui_UIProducts (object): def setupUi (zelf, UIProducts): UIProducts.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497, 374) self.centralwidget = QtGui.QWidget (UIProducts) self.centralwidget.setObjectName (_fromUtf8 ("centralwidgetGuiCodigo") self.lQLablidgetQGuiqCodigoblgetQGuiqCodigoblgetQGuiqCodigoblgetQGuiqCodigo 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 (_fromUtCodigo") ) self.txtPrice = QtGui.QLineEdit (self.centralwidget) self.txtPrice.setGeometry (QtCore.QRect (340, 40, 113, 27)) self.txtPrice.setObjectName (_fromUtf8 ("txtPrice")) self.txtGuantity = QtxtGuantity .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.HLin) self.line.setFrameShadow (QtGui.QFrame.Sunken) self.line.setObjectName (_fromUtf8 ("line")) self.btSave = QtGui.QPushButton (self.centralwidget) self.btCoretry) zelf .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 (UIProctBrojectBrojectNametrans) ) : UIProducts.setWindowTitle (_translate ("UIProducts", "Product List", Geen)) 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", " Lijst met producten ", Geen)) self.lblProducto.setText (_translate (" UIProductos "," Product ", Geen)) self.tableWidget.setSortingEnabled (True)
Vervolgens zullen we een ander bestand maken voor de ontwerpfunctionaliteit die in de vorige is gedefinieerd:
 uit PyQt4 importeer QtCore uit PyQt4 importeer QtGui uit PyQt4.QtCore import * uit PyQt4.QtGui import * uit productlijst import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init __). (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 . Database starten () self.conn = Geen self.cursor = Geen # We starten de database en maken de tabel als deze niet bestaat def Database starten (self): self.conn = sqlite3.connect ("dbproducts.bd") cursor = self .conn.cursor () cursor.execute ("" "MAAK TABLE ALS NIET BESTAAT producten (TEKST NIET NULL code, TEKST NIET NULL product, TEKST NIET NULL hoeveelheid, TEKST NIET NULL prijs)" "") 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. hoeveelheid, zelf.prijs) cursor.execute ("INSERT INTO products (code, product, hoeveelheid, prijs) VALUES (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Record opgeslagen", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # De aangegeven gegevens worden geladen uit de tabel cursor.execute ("SELECT code, product, hoeveelheid, prijs FROM producten") 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.tableWidget.setRowfiunt. (setRowodeCount.self. aantaloffi rijen [0print)] voor j in bereik (zelf.aantal rijen): rij = table_info [j] print j voor i binnen bereik (0, len (rij)): item = rij [i] print item item = str (item) newitem = QTableWidgetItem (item) self.ui.tableWidget.setItem (j, i , nieuwitem) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) mijnapp = FrmProducts () mijnapp.show () sys.exit (app.exec_ ())
Het resultaat bij het uitvoeren van de code is het volgende:

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave