Applikationer med Sqlite Database, PyQT og QT Desginer

Indholdsfortegnelse
Der er andre API'er at kunne oprette GUI -applikationer i Python for eksempel QT Designer som giver dig mulighed for at oprette flotte visuelle grænseflader, og derefter via PyQt -bibliotekerne automatisk generere den nødvendige kode for grænsefladerne i Python med kommandoen pyuic, hvad er en UI -kompilator til QT hvad der følger med PyQt -pakke.

Tutorials Cross-platform applikationer med Python, PyQT og QT Desginer 5, vi havde startet hvordan man installerer og konfigurerer python, pyqt og qt Angiv i denne tutorial vil vi bruge PyQT 4 af stabilitetsmæssige årsager, det kan også bruges med PyQt 5 biblioteker .
I denne vejledning opretter vi en visuel applikation til at forbinde en Sqlite 3 -database og definere funktionerne til at gemme og vise data.
Vi starter med at oprette databasen i Sqlite til dette, vi kan bruge Sqliteman -softwaren, der kan bruges i ethvert operativsystem. Vi kan downloade og installere det for at kunne administrere Sqlite version 3 databaser.

Fra det officielle websted kan vi downloade den version til operativsystemet, der passer til os i vores udvikling.

Dernæst starter vi Sqliteman og går til menuen Fil> Ny fil og vi opretter vores database dbproducts.db.
Derefter går vi til menuen Kontekst> Opret tabel og vi opretter produktbordet.

SQL -koden kan hentes fra den samme software ved at højreklikke på bordnavnet og bruge funktionen Beskrivelse af tabel, vil den resulterende kode være følgende:
 OPRET TABEL -produkter (TEKST IKKE NULL -kode, TEKST IKKE NULL -produkt, TEKST IKKE NULL -mængde, TEKST IKKE NULL -pris)
For at programmere i Python vil vi bruge NetBeans i denne vejledning, vi skal bruge et plugin, som vi kan downloade fra Netbeans Plugins -webstedet.

Vi downloader filen, vi pakker den ud, inde i mappen har vi alle de filer og afhængigheder, der skal tilføjes til NetBeans.

Derefter åbner vi Netbeans -programmet, vi skal bruge version 8.0.2 og gå til menuen Værktøjer> Plugin, derefter går vi til fanen Downloadet, og der åbnes en dialogboks, hvor vi vælger alle de plugins, vi downloader med nøglen:

Skift +

Derefter klikker vi på knappen Installer for at aktivere pluginet, så genstarter vi NetBeans.

Dernæst åbner vi NetBeans og går til menuen Fil> Nyt projekt og Vi vælger Python -indstillingen og derefter Python Project.

Derefter vil vi tildele et navn til vores projekt og den version af python, der vil udføre koden, i dette tilfælde version 2.7.6.

Nu hvor vi har oprettet projektet, skal vi oprette grænsefladen til dette, vi går til Qt designer, og vi vil oprette følgende skærm

Vi opretter først Qt Designer -projektet, går til menuen Filer> Nyt projekt og vælger den type skærm, vi skal bruge, det vil være Hovedvindue.

Derefter sætter vi 4 widget -etiketter, hvis vi ikke kan finde den i widgetboksen til venstre, bliver vi nødt til at lede efter den.

I egenskabsfeltet til højre skal vi tildele hver enkelt sit respektive navn og derefter identificere det, med kodekonventionerne ville vi have følgende navne lblKode, lblProdukt, lbl Mængde Y lblPris.
Vi har mange egenskaber til at konfigurere hvert element, men i denne vejledning vil vi bruge de mest basale. Så vi tager hver etiket og trækker den til skærmen for at lade den stå i den position, vi ønsker.
Dernæst sætter vi tekstfelterne eller LineEdit, til hver enkelt tildeler vi et navn txtCode, txtProdukt, txt Mængde, txtPris. Disse vil være felterne i databasen med disse tekstbokse, vi vil indtaste data, som vi derefter vil gemme.
Dernæst sætter vi 2 Trykknap eller knapper en vil være btSave at indsætte data i databasen og andet btUpdate for at opdatere en liste med data.
Så tilføjer vi en tableWidget som vi også bliver nødt til at kigge efter i venstre kolonne, vi trækker det til skærmen og navngiver det tbl produktliste.
Derefter gemmer vi filen som productlist.ui. i mappen, hvor er projektet, som vi har oprettet med netbønner.
Vi åbner et terminalvindue for at konvertere filen fra QT produktliste.ui til python ved hjælp af følgende kommando:
 puic4 productlist.ui> productlist.py
Python -koden for designet vil være som følger
 # - * - kodning: utf -8 - * - # Formimplementering genereret fra læsning af ui -fil 'productlist.ui' # # Oprettet: søn 1. november 18:03:40 2015 # af: PyQt4 UI -kodegenerator 4.10.4 # # ADVARSEL! Alle ændringer i denne fil vil gå tabt! fra PyQt4 import QtCore, QtGui prøve: _fromUtf8 = QtCore.QString.fromUtf8 undtagen AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui (context, return, translate (kontekst, tekst, disambig, _encoding) undtagen 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 (_fromUtfoGoGoLoGoGoCoGoLoGoGoCoGoGoCoGoLoGoCoGoGoCoGoGoCoGoGoCoGoCoGoCoIgCoGoCoGoCoIgCoIgCoGoCgIgCoCoIgCgcgcgcgcgcgcgcGyCgcgcgcgcgyCg) self.lblCodigo.setGeometry (QtCore.QRect (20, 16, 56, 17)) self.lblCodigo.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblCodigo.setTextFormat (QtCore.Qt) .PlainText ( ) .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 ("lbl _fromUtf8 ("lbljectCan))) self.txtCode = QtGui.QLineEdit (self.centralwidget) self.txtCode.setGeometry (QtCore.QRect (90, 10, 113, 27)) self.txtCodigo.setObjectName (_fromUtf8 (") ) 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.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) .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 (_fromUt8 (") 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 (_ ("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.setGe. QRect (10, 170, 471, 131)) self.tableWidget.setWordWrap (True) self.tableWidget.setObjectName (_fromUtf8 ("tableWidget")) self.tableWidget.setColumnCount (0) self.tableWidget.setRowCount (0) UIProduct. 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 ("statuslinje")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBrojectConnectUnitUnitBrojectConnectUnitUnitBrojectConnectUnnetBrojectConnectUnitBrojectConnectUnctrojectConnectUnitUctroUnctrojectConnectUnctrojectConnectUroUctroManctBrojectConnectUnctroUnctroUnctroUnctrojectConnectUnctroUctroUnctroUnctroUnctroUnctrojectConnectUctroUnctroUnctroUnctroUnctroUctroUtroUnctroUnctroUnctroUnctroUsupture : UIProducts.setWindowTitle (_translate ("UIProducts", "Product List", None)) self.lblCodigo.setText (_translate ("U IProducts "," Code ", None)) self.lblPrice.setText (_translate (" IPproducts "," 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", ") Liste over produkter ", ingen)) self.lblProducto.setText (_translate (" UIProductos "," Product ", None)) self.tableWidget.setSortingEnabled (True)
Dernæst opretter vi en anden fil til designfunktionaliteten defineret i den foregående:
 fra PyQt4 import QtCore fra PyQt4 import QtGui fra PyQt4.QtCore import * fra PyQt4.QtGui import * fra produktliste import Ui_FrmProducts import sqlite3 import sys klasse FrmProducts (QtGui.QMainWindow) (def __init.) Ingen. (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 = Ingen self.cursor = Ingen # Vi starter databasen og opretter tabellen, hvis den ikke findes def Start Database (self): self.conn = sqlite3.connect ("dbproducts.bd") markør = self .conn.cursor () cursor.execute ("" "CREATE TABLE IF NOT EXISTS products (TEKST IKKE NULL kode, TEKST IKKE NULL produkt, TEKST IKKE NULL mængde, TEKST IKKE NULL pris)" "") 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. mængde, selvpriser) cursor.execute ("INSERT INTO products (code, product, amount, price) VALUES (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Record gemt", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # De angivne data indlæses fra tabellen cursor.execute ("SELECT kode, produkt, mængde, pris FRA produkter") 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 (. numberoffi rækker [0print)] for j i området (selv. antal rækker): række = 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 , newitem) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) myapp = FrmProducts () myapp.show () sys.exit (app.exec_ ())
Resultatet ved udførelse af koden vil være følgende:

Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt
wave wave wave wave wave