Innehållsförteckning
Det finns andra API: er att kunna skapa GUI -applikationer i Python till exempel QT Designer som låter dig skapa snygga visuella gränssnitt och sedan genom PyQt -biblioteken automatiskt generera den nödvändiga koden för gränssnitten i Python med kommandot pyuic, vad är en UI -kompilator för QT vad som följer med det PyQt -paket.I denna handledning kommer vi att skapa en visuell applikation för att ansluta en Sqlite 3 -databas och definiera funktionerna för att spara och visa data.
Vi börjar med att skapa databasen i Sqlite för detta kan vi använda Sqliteman -programvaran som kan användas i alla operativsystem. Vi kan ladda ner och installera det för att kunna hantera Sqlite version 3 databaser.
Sedan går vi till menyn Kontext> Skapa tabell och vi skapar produktbordet.
SKAPA TABELL -produkter (TEXT NOT NULL -kod, TEXT NOT NULL -produkt, TEXT NOT NULL -kvantitet, TEXT NOT NULL -pris)För att programmera i Python kommer vi att använda NetBeans i den här självstudien, vi behöver ett plugin som vi kan ladda ner från Netbeans Plugins -webbplats.
Skift + ↓
Sedan klickar vi på knappen Installera för att aktivera plugin, sedan startar vi om NetBeans.Vi har många egenskaper för att konfigurera varje element men i den här självstudien kommer vi att använda de mest grundläggande. Så vi tar varje etikett och drar den till skärmen för att lämna den i den position vi vill ha.
Därefter lägger vi textrutorna eller LineEdit, till var och en tilldelar vi ett namn txtCode, txtProdukt, txt Antal, txtPris. Dessa kommer att vara fälten i databasen med dessa textrutor vi kommer att ange data som vi sedan kommer att spara.
Därefter lägger vi 2 Tryckknapp eller knappar en kommer att vara btSave att infoga data i databasen och annat btUpdate för att uppdatera en lista med data.
Sedan lägger vi till en tableWidget som vi också måste leta efter i den vänstra kolumnen, vi drar den till skärmen och ger den ett namn tbl -produktlista.
Sedan sparar vi filen som productlist.ui. i mappen där är projektet som vi skapade med nätbönor.
Vi öppnar ett terminalfönster för att konvertera filen från QT -produktlista.ui till python med följande kommando:
puic4 productlist.ui> productlist.pyPython -koden för designen kommer att vara följande
# - * - kodning: utf -8 - * - # Formimplementering genererad från läsning av ui -fil 'productlist.ui' # # Skapad: sön 1 november 18:03:40 2015 # av: PyQt4 UI -kodgenerator 4.10.4 # # VARNING! Alla ändringar som görs i den här filen kommer att gå förlorade! från PyQt4 importera QtCore, QtGui försök: _fromUtf8 = QtCore.QString.fromUtf8 utom AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui (displacement, context, translate (sammanhang, text, disambig, _encoding) utom 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 ( "centralwidgetGuiCodigo") self.lQLablidgetGuiCodigo = QLaqlidgetbligoCodigo 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.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 ( "statusraden")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBrojectConnectUi (UIProctBrojectBrojectName)) def retranslateUi (själv, UIProducts) : UIProducts.setWindowTitle (_translate ("UIProducts", "Product List", 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 över produkter ", None)) self.lblProducto.setText (_translate (" UIProductos "," Product ", None)) self.tableWidget.setSortingEnabled (True)Därefter skapar vi en annan fil för designfunktionen som definierades i den föregående:
från PyQt4 import QtCore från PyQt4 import QtGui från PyQt4.QtCore import * från PyQt4.QtGui import * från produktlista import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init )in. (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 # Vi startar databasen och skapar tabellen om den inte finns def Start Database (self): self.conn = sqlite3.connect ("dbproducts.bd") markör = self .conn.cursor () cursor.execute ("" "CREATE TABLE IF NOT EXISTS products (TEXT NOT NULL code, TEXT NOT NULL product, TEXT NOT NULL amount, TEXT NOT NULL price)" "") def Save_click (self ): conn = sqlite3.connect ("dbproducts.bd") markör = 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. kvantitet, självpris) cursor.execute ("INSERT INTO products (code, product ,antal, pris) VALUES (?,?,?,?)", 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") # Angiven data laddas från tabellen cursor.execute ("VÄLJ kod, produkt, kvantitet, pris FRÅN 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.antal of rows = len (table_info) self.ui.tableWidget.setRowCount (self. numberoffi rader [0print)] för j i intervallet (själv. antal rader): rad = table_info [j] skriva ut j för i inom intervallet (0, len (rad)): item = rad [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 när koden körs blir följande: