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.Handledningen Plattformsoberoende applikationer med Python, PyQT och QT Desginer 5, vi hade börjat installera och konfigurera python, pyqt och qt Ange i denna handledning vi kommer att använda PyQT 4 av stabilitetsskäl, det kan också användas med PyQt 5-bibliotek .
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.
Från den officiella webbplatsen kan vi ladda ner den version för operativsystemet som passar oss för vår utveckling.
Därefter startar vi Sqliteman och går till menyn Arkiv> Ny fil och vi skapar vår databas dbproducts.db.
Sedan går vi till menyn Kontext> Skapa tabell och vi skapar produktbordet.
SQL -koden kan hämtas från samma programvara genom att högerklicka på tabellnamnet och använda alternativet Beskriv tabell, blir den resulterande koden följande:
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.
Vi laddar ner filen, vi packar upp den, inuti mappen kommer vi att ha alla filer och beroenden att lägga till i NetBeans.
Sedan öppnar vi Netbeans -programmet, vi behöver version 8.0.2 och går till menyn Verktyg> Plugin, sedan går vi till fliken Nedladdad och en dialogruta öppnas där vi väljer alla plugins som vi laddar ner med nyckeln:
Skift + ↓
Sedan klickar vi på knappen Installera för att aktivera plugin, sedan startar vi om NetBeans.Därefter öppnar vi NetBeans och går till menyn Arkiv> Nytt projekt och Vi väljer alternativet Python och sedan Python Project.
Sedan kommer vi att tilldela ett namn till vårt projekt och den version av python som kommer att köra koden, i det här fallet version 2.7.6.
Nu när vi har skapat projektet, kommer vi att skapa gränssnittet för detta går vi till Qt designer och vi kommer att skapa följande skärm
Vi kommer först att skapa Qt Designer -projektet, gå till menyn Arkiv> Nytt projekt och välj vilken typ av skärm som vi ska använda, det kommer att vara Huvudfönster.
Sedan lägger vi 4 widgetetiketter, om vi inte kan hitta det i widgetrutan till vänster måste vi leta efter det.
I egenskapsrutan till höger måste vi tilldela var och en sitt respektive namn och sedan identifiera det, med kodkonventionerna skulle vi ha följande namn lblCode, lblProdukt, lbl Kvantitet Y lblPris.
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:
Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng