Das Tutorial Multiplatform-Anwendungen mit Python, PyQT und QT Desginer 5. Wir haben mit der Installation und Konfiguration von Python, PyQT und QT begonnen. In diesem Tutorial werden wir PyQT 4 aus Stabilitätsgründen verwenden. Dasselbe gilt für PyQT 5-Bibliotheken.
In diesem Tutorial erstellen wir eine visuelle Anwendung zum Verbinden einer SQLite 3-Datenbank und definieren die Funktionen zum Speichern und Anzeigen von Daten.
Wir werden mit der Erstellung der Datenbank in Sqlite beginnen, damit wir die Sqliteman- Software verwenden können, die in jedem Betriebssystem verwendet werden kann. Wir können es herunterladen und installieren, um SQLite-Datenbanken der Version 3 zu verwalten.
Von der offiziellen Website können wir die Version für das Betriebssystem herunterladen, die zu unserer Entwicklung passt.
Als nächstes starten wir Sqliteman und gehen zum Menü Datei> Neue Datei und erstellen unsere Datenbank dbproductos.db.
Dann gehen wir zum Menü Kontext> Tabelle erstellen und erstellen die Produkttabelle.
Der SQL-Code kann von derselben Software abgerufen werden, indem Sie mit der rechten Maustaste auf den Namen der Tabelle klicken und die Option “Tabelle beschreiben” verwenden. Der resultierende Code lautet wie folgt:
TABELLE ERSTELLEN Produkte (TEXT NICHT NULL Code, Produkt TEXT NICHT NULL, Menge TEXT NICHT NULL, Preis TEXT NICHT NULL)
Um in Python zu programmieren, verwenden wir NetBeans in diesem Tutorial. Wir benötigen ein Plugin, das wir von der Netbeans Plugins-Website herunterladen können.
Wir laden die Datei herunter und entpacken sie. Im Ordner befinden sich alle Dateien und Abhängigkeiten, die wir zu NetBeans hinzufügen möchten.
Dann öffnen wir das Netbeans-Programm, wir benötigen Version 8.0.2 und gehen zum Menü Extras > Plugin, dann gehen wir zur Registerkarte Heruntergeladen und es öffnet sich ein Dialogfeld, in dem wir alle Plugins auswählen, die wir mit dem Schlüssel heruntergeladen haben:
+ ↓ Umschalt + ↓
Dann klicken wir auf die Schaltfläche Installieren, um das Plugin zu aktivieren, und starten NetBeans neu.
Als nächstes öffnen wir NetBeans und gehen zum Menü Datei> Neues Projekt und wählen die Option Python und dann Python-Projekt.
Dann vergeben wir einen Namen für unser Projekt und die Version von Python, die den Code in dieser Fallversion 2.7.6 ausführt.
Nachdem wir das Projekt erstellt haben, erstellen wir die Schnittstelle dafür, gehen zu Qt Designer und erstellen den folgenden Bildschirm
Zuerst erstellen wir das Qt Designer-Projekt. Gehen Sie zum Menü Datei> Neues Projekt und wählen Sie den Bildschirmtyp aus, den wir verwenden möchten: Hauptfenster.
Dann werden wir 4 Label Widget setzen, wenn wir es nicht im Widget-Feld auf der linken Seite finden können, müssen wir danach suchen.
Im Eigenschaftsfeld auf der rechten Seite müssen wir jedem seinen jeweiligen Namen zuweisen und ihn dann identifizieren. Mit der Codevereinbarung würden wir die folgenden Namen haben: Code , Produkt , Produktmenge und Preis .
Wir haben viele Eigenschaften, um jedes Element zu konfigurieren, aber in diesem Tutorial werden wir die grundlegendsten verwenden. Also nehmen wir jedes Etikett und ziehen es auf den Bildschirm, um es an der gewünschten Position zu belassen.
Als nächstes setzen wir die Textfelder oder LineEdit und weisen jedem einen Namen zu: txtCodigo , txtProduct , txtQuantity , txtPrice . Dies sind die Felder der Datenbank mit diesen Textfeldern, in die wir Daten einfügen, die wir dann speichern.
Dann setzen wir 2 Taster oder Taster, einer ist bt Speichern , um Daten in die Datenbank einzufügen, und ein weiterer btUpdate , um eine Liste von Daten zu aktualisieren.
Dann fügen wir ein tableWidget hinzu , das wir auch in der linken Spalte suchen müssen, ziehen es auf den Bildschirm und nennen es eine Liste von tblproductos .
Dann speichern wir die Datei als listproductos.ui. in dem Ordner, in dem sich das mit netbeans erstellte Projekt befindet .
Wir öffnen ein Terminalfenster, um die QT- Datei listproducts.ui mit dem folgenden Befehl in Python zu konvertieren:
puic4 listaproductos.ui> listaproductos.py
Der Python-Code des Designs lautet wie folgt
# - * - Kodierung: utf-8 - * - # Formularimplementierung durch Lesen der UI-Datei 'listproductos.ui' generiert # # Erstellt: So Nov 1 18:03:40 2015 # von: PyQt4 UI Code Generator 4.10.4 # # WARNUNG! Alle in dieser Datei vorgenommenen Änderungen gehen verloren! aus PyQt4 importieren QtCore, QtGui versuche: _fromUtf8 = QtCore.QString.fromUtf8 außer AttributeError: def _fromUtf8 (s): return s versuche: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate (Kontext, Text, Begriffsklärung): QtGui.QApplication.translate zurückgeben (Kontext, Text, Begriffsklärung, _encoding) außer AttributeError: def _translate (Kontext, Text, Begriffsklärung): return QtGui.QApplication.translate (Kontext, Text, Begriffsklärung) Klasse Ui_UIProductos (Objekt): def setupUi (self, UIProductos): UIProductos.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497, 374) self.centralwidget = QtGui.QWidget (UIProductos) self.centralwidget.setObjectName (_fromUtf8 ("centralwidget")) self.lblCodigo = QtGui.QLabel (self.centralwidget) self.lblCodigo.setGeometry (QtCore.QRect (20, 16, 56, 17)) self.lblCodigo.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblCodigo.setTextFormat (QtCore.Qt.PlainText) self.lblCodigo.setObjectName (_fromUtf8 ("lblCodigo")) self.lblPrice = QtGui.QLabel (self.centralwidget) self.lblPrice.setGeometry (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.lblQuantity.setGeometry (QtCore.QRect (20, 46, 56, 17)) self.lblQuantity.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblQuantity.setObjectName (_fromUtf8 ("lblQuantity")) self.txtCodigo = QtGui.QLineEdit (self.centralwidget) self.txtCodigo.setGeometry (QtCore.QRect (90, 10, 113, 27)) self.txtCodigo.setObjectName (_fromUtf8 ("txtCodigo")) self.txtPrice = QtGui.QLineEdit (self.centralwidget) self.txtPrice.setGeometry (QtCore.QRect (340, 40, 113, 27)) self.txtPrice.setObjectName (_fromUtf8 ("txtPrice")) self.txtQuantity = QtGui.QLineEdit (self.centralwidget) self.txt Quantity.setGeometry (QtCore.QRect (90, 40, 113, 27)) self.txt Quantity.setObjectName (_fromUtf8 ("txtQuantity")) 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.btSave.setGeometry (QtCore.QRect (140, 80, 91, 27)) self.btSave.setMinimumSize (QtCore.QSize (91, 0)) self.btStore.setObjectName (_fromUtf8 ("btSave")) self.btUpdate = QtGui.QPushButton (self.centralwidget) self.btUpdate.setGeometry (QtCore.QRect (250, 80, 101, 27)) self.btUpdate.setMinimumSize (QtCore.QSize (101, 0)) self.btUpdate.setObjectName (_fromUtf8 ("btUpdate")) self.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.lblProduct.setMaximumSize (QtCore.QSize (16777215, 21)) self.lblProduct.setObjectName (_fromUtf8 ("lblProduct")) self.txtProduct = QtGui.QLineEdit (self.centralwidget) self.txtProduct.setGeometry (QtCore.QRect (340, 10, 113, 27)) self.txtProduct.setObjectName (_fromUtf8 ("txtProduct")) self.tableWidget = QtGui.QTableWidget (self.centralwidget) self.tableWidget.setGeometry (QtCore.QRect (10, 170, 471, 131)) self.tableWidget.setWordWrap (True) self.tableWidget.setObjectName (_fromUtf8 ("tableWidget")) self.tableWidget.setColumnCount (0) self.tableWidget.setRowCount (0) UIProductos.setCentralWidget (self.centralwidget) self.menubar = QtGui.QMenuBar (UIProductos) self.menubar.setGeometry (QtCore.QRect (0, 0, 497, 27)) self.menubar.setObjectName (_fromUtf8 ("menubar")) UIProductos.setMenuBar (self.menubar) self.statusbar = QtGui.QStatusBar (UIProductos) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProductos.setStatusBar (self.statusbar) self.retranslateUi (UIProductos) QtCore.QMetaObject.connectSlotsByName (UIProductos) def retranslateUi (self, UIProductos): UIProductos.setWindowTitle (_translate ("UIProductos", "Liste der Produkte", keine)) self.lblCodigo.setText (_translate ("UIProductos", "Code", keine)) self.lblPrice.setText (_translate ("UIProductos", "Price", None)) self.lblQuantity.setText (_translate ("UIProductos", "Quantity", None)) self.btSave.setText (_translate ("UIProductos", "Save", None)) self.btActualize.setText (_translate ("UIProductos", "Update List", None)) self.label.setText (_translate ("UIProductos", "Liste der Produkte", keine)) self.lblProducto.setText (_translate ("UIProductos", "Producto", None)) self.tableWidget.setSortingEnabled (True)
Als Nächstes erstellen wir eine weitere Datei für die Funktionalität des Designs, das im vorherigen definiert wurde:
aus PyQt4 QtCore importieren aus PyQt4 importieren QtGui aus PyQt4.QtCore importieren * aus PyQt4.QtGui importieren * aus listproductos importieren Sie Ui_FrmProducts importieren sqlite3 Import sys Klasse FrmProducts (QtGui.QMainWindow): def __init __ (self, parent = None): QtGui.QWidget .__ init __ (self, parent) self.ui = Ui_FrmProducts () self.ui.setupUi (Selbst) self.ui.btSave.clicked.connect (self.Save_click) self.ui.btActualize.clicked.connect (self.Update_click) self.StartDatabase () self.conn = Keine self.cursor = Keine #Wir starten die Datenbank und erstellen die Tabelle, falls sie nicht existiert Def StartDataset (self): self.conn = sqlite3.connect ("dbproductos.bd") cursor = self.conn.cursor () cursor.execute ("" "TABELLE ERSTELLEN, WENN KEINE PRODUKTE VORHANDEN SIND (code TEXT NOT NULL, Produkt TEXT NICHT NULL, Menge TEXT NICHT NULL, Preis TEXT NICHT NULL) "" ") def Save_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () self.codigo = str (self.ui.txtCodigo.text ()) self.product = str (self.ui.txtProducto.text ()) self.quantity = str (self.ui.txtQuantity.text ()) self.price = str (self.ui.txtPrecio.text ()) self.registration = (self.codigo, self.product, self.quantity, self.price) cursor.execute ("INSERT INTO products (Code, Produkt, Menge, Preis) VALUES (?,?,?,?)", Selbstregistrierung) conn.commit () self.ui.lineEdit.setText ("") conn.commit () QMessageBox.about (self, "Saved record", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Die in der Tabelle angegebenen Daten werden geladen cursor.execute ("Code, Produkt, Menge, Preis von Produkten auswählen") 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.numerodefilas = len (table_info) self.ui.tableWidget.setRowCount (self.numerodefilas) #print rows [0] für j in range (self.numerodefilas): row = table_info [j] print j für i in range (0, len (row)): element = row [i] Druckelement element = str (element) newitem = QTableWidgetItem (Element) self.ui.tableWidget.setItem (j, i, newitem) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) myapp = FrmProducts () myapp.show () sys.exit (app.exec_ ())
Das Ergebnis beim Ausführen des Codes ist wie folgt: