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 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.
Poté přejdeme do nabídky Kontext> Vytvořit tabulku a vytvoříme tabulku produktů.
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.
Shift + ↓
Poté klikneme na tlačítko Instalovat pro aktivaci pluginu, poté restartujeme NetBeans.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.pyKó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í: