Aplikace s databází Sqlite, PyQT a QT Desginer

Obsah
Existují další API, která je možné vytvářet aplikace GUI v Pythonu například Návrhář QT což vám umožní vytvořit hezky vypadající vizuální rozhraní a poté prostřednictvím knihoven PyQt automaticky vygenerovat potřebný kód rozhraní v Pythonu pomocí příkazu pyuický, co je a Kompilátor uživatelského rozhraní pro QT co s tím přichází Balíček PyQt.

Výukové aplikace pro více platforem s Pythonem, PyQT a QT Desginer 5, začali jsme s instalací a konfigurací pythonu, pyqt a qt Určete v tomto tutoriálu použijeme PyQT 4 z důvodu stability, lze jej také použít s knihovnami PyQt 5 .
V tomto tutoriálu vytvoříme vizuální aplikaci pro připojení databáze Sqlite 3 a definování funkcí pro ukládání a zobrazování dat.
Začneme vytvořením databáze ve Sqlite, proto můžeme použít software Sqliteman, který lze použít v jakémkoli operačním systému. Můžeme jej stáhnout a nainstalovat, abychom mohli spravovat databáze Sqlite verze 3.

Z oficiálních stránek si můžeme stáhnout verzi pro operační systém, která nám vyhovuje pro náš vývoj.

Dále spustíme Sqliteman a přejdeme do nabídky Soubor> Nový soubor a vytvoříme naši databázi dbproducts.db.
Poté přejdeme do nabídky Kontext> Vytvořit tabulku a vytvoříme tabulku produktů.

Kód SQL lze získat ze stejného softwaru kliknutím pravým tlačítkem na název tabulky a pomocí možnosti Popis tabulky bude výsledný kód následující:
 VYTVOŘIT TABULKOVÉ produkty (TEXT NENÍ NULL kód, TEXT NENÍ NULL produkt, TEXT NENÍ NULL množství, TEXT NENÍ NULL cena)
K programování v Pythonu použijeme v tomto tutoriálu NetBeans, budeme potřebovat plugin, který si můžeme stáhnout z webu Netbeans Plugins.

Soubor stáhneme, rozbalíme, uvnitř složky budeme mít všechny soubory a závislosti, které můžeme přidat do NetBeans.

Poté otevřeme program Netbeans budeme potřebovat verzi 8.0.2 a přejdeme do nabídky Nástroje> Plugin, poté přejdeme na kartu Staženo a otevře se dialogové okno, kde vybereme všechny doplňky, které stáhneme klíčem:

Shift +

Poté klikneme na tlačítko Instalovat pro aktivaci pluginu, poté restartujeme NetBeans.

Dále otevřeme NetBeans a přejdeme do nabídky Soubor> Nový projekt a Vybereme možnost Python a poté Python Project.

Poté našemu projektu a verzi pythonu, která bude spouštět kód, přiřadíme název, v tomto případě verze 2.7.6.

Nyní, když jsme vytvořili projekt, vytvoříme pro toto rozhraní přejdeme k návrháři Qt a vytvoříme následující obrazovku

Nejprve vytvoříme projekt Qt Designer, přejdeme do nabídky Soubor> Nový projekt a vybereme typ obrazovky, kterou budeme používat, bude to Hlavní okno.

Poté vložíme 4 štítek widgetu, pokud jej nemůžeme najít v poli widgetu vlevo, budeme ho muset hledat.

V poli vlastností vpravo musíme každému přiřadit jeho příslušný název a poté jej identifikovat, podle konvencí kódu bychom měli následující názvy lblCode, lblProduct, lbl Množství Y lblCena.
Ke konfiguraci každého prvku máme mnoho vlastností, ale v tomto kurzu použijeme ty nejzákladnější. Vezmeme tedy každý štítek a přetáhneme ho na obrazovku, abychom jej nechali na požadované pozici.
Dále vložíme textová pole nebo LineEdit, každému přiřadíme název txtCode, txtProduct, txt Množství, txtCena. To budou pole databáze s těmito textovými poli zadáme data, která následně uložíme.
Dále dáme 2 Stiskněte tlačítko nebo tlačítka jedna bude btSave vkládat data do databáze a další btUpdate aktualizovat seznam dat.
Poté přidáme a tableWidget že také budeme muset hledat v levém sloupci, přetáhneme ho na obrazovku a pojmenujeme seznam produktů tbl.
Poté soubor uložíme jako productlist.ui. ve složce, kde je projekt, se kterým jsme vytvořili netbeans.
Otevřeme okno terminálu, ze kterého chceme soubor převést QT productlist.ui do pythonu pomocí následujícího příkazu:
 puic4 productlist.ui> productlist.py
Kód Pythonu návrhu bude následující
 # - * - kódování: utf -8 - * - # Implementace formuláře generována čtením souboru ui 'productlist.ui' # # Vytvořeno: 1. listopadu 18:03:40 2015 # od: Generátor kódu uživatelského rozhraní PyQt4 4.10.4 # # VAROVÁNÍ! Všechny změny provedené v tomto souboru budou ztraceny! z PyQt4 import QtCore, QtGui zkuste: _fromUtf8 = QtCore.QString.fromUtf8 kromě AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui (kontext, návrat, translate (kontext, text, disambig, _encoding) kromě AttributeError: def _translate (kontext, text, disambig): návrat třídy QtGui.QApplication.translate (kontext, text, disambig) Ui_UIProducts (objekt): def setupUi (self, UIProducts): UIProducts.setObjectName (_fromUtf8 („UIProductos“)) UIProductos.resize (497, 374) self.centralwidget 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 (self.centralwidget) self.lblAmount.setGeometry (QtCore.QRect (20, 46, 56, 17)) self.lblAmount.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblAmount.setObjectName (_fromUtf8 (_fromUtf8 _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.txtQuant .QLineEdit (self. Centralwidget) self.txtAmount.setGeometry (QtCore.QRect (90, 40, 113, 27)) self.txtAmount.setObjectName (_fromUtf8 ("txtAmount")) self.line = QtGui.QFrame (self.central ) 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 (Q .btCoretry (QtGetry) .QRect (140, 80, 91, 27)) self.btSave.setMinimumSize (QtCore.QSize (91, 0)) self.btSave.setObjectName (_fromUtf8 ("btSave")) self.btUpdate = Q .QPush .Button (self. Centralwidget) self.btUpdate.setGeometry (QtCore.QRect (250, 80, 101, 27)) self.btUpdate.setMinimumSize (QtCore.QSize (101, 0)) self.btUpdate.setObjectName (") 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.setfame ("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.setGeomet 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 (") menubarduct (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBjectTrojectConnect : 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", " Seznam produktů ", žádný)) self.lblProducto.setText (_translate (" UIProductos "," Product ", None)) self.tableWidget.setSortingEnabled (True)
Dále vytvoříme další soubor pro funkce návrhu definované v předchozím:
 z PyQt4 import QtCore z PyQt4 import QtGui z PyQt4.QtCore import * z PyQt4.QtGui import * ze seznamu produktů import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init __ (self. parentin 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 # Spustíme databázi a vytvoříme tabulku, pokud neexistuje def Spustit databázi (self): self.conn = sqlite3.connect ("dbproducts.bd") kurzor = self .conn.cursor () cursor.execute ("" "CREATE TABLE IF NOT EXISTS products (TEXT NOT NULL code, TEXT NOT NULL product, TEXT NOT NULL množství, TEXT NOT NULL price)" "") 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. množství, vlastní.cena) kurzor.execute ("VLOŽIT DO PRODUKTŮ (kód, produkt, množství, cena) HODNOTY (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (vlastní, "Záznam uložen", "Upozornění") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Uvedená data se načtou z tabulky cursor.execute ("VYBRAT kód, produkt, množství, cena Z produktů") 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 (self.numerodefi numberoffi řádků [0print)] pro j v rozsahu (vlastní počet řádků): řádek = table_info [j] tisk j pro i v rozsahu (0, len (řádek)): item = řádek [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_ ())
Výsledek při provádění kódu bude následující:

Líbil se vám tento návod a pomohl mu?Autora můžete odměnit stisknutím tohoto tlačítka, čímž mu dáte kladný bod
wave wave wave wave wave