Aplikacje z bazą danych Sqlite, PyQT i QT Desginer

Spisie treści
Istnieją inne interfejsy API, które umożliwiają tworzyć aplikacje GUI w Pythonie na przykład Projektant QT co pozwala na tworzenie ładnie wyglądających interfejsów wizualnych, a następnie poprzez biblioteki PyQt automatycznie generuje niezbędny kod interfejsów w Pythonie za pomocą polecenia pyuicco to jest Kompilator interfejsu użytkownika dla QT co z tym przychodzi? Pakiet PyQt.

Samouczek Aplikacje wieloplatformowe z Python, PyQT i QT Desginer 5, zaczęliśmy jak zainstalować i skonfigurować python, pyqt i qt Wyznacz w tym samouczku użyjemy PyQT 4 ze względu na stabilność, może być również używany z bibliotekami PyQt 5 .
W tym samouczku stworzymy wizualną aplikację do podłączenia bazy danych Sqlite 3 i zdefiniujemy funkcje zapisywania i wyświetlania danych.
Zaczniemy od stworzenia bazy danych w Sqlite do tego możemy użyć oprogramowania Sqliteman, które może być używane w dowolnym systemie operacyjnym. Możemy go pobrać i zainstalować, aby móc zarządzać bazami danych Sqlite w wersji 3.

Z oficjalnej strony możemy pobrać wersję dla systemu operacyjnego, która nam odpowiada do naszego rozwoju.

Następnie uruchamiamy Sqliteman i przechodzimy do menu Plik> Nowy plik i tworzymy naszą bazę danych dbprodukty.db.
Następnie przechodzimy do menu Kontekst> Utwórz tabelę i tworzymy tabelę produktów.

Kod SQL można uzyskać z tego samego oprogramowania, klikając prawym przyciskiem myszy nazwę tabeli i korzystając z opcji Opisz tabelę, otrzymany kod będzie następujący:
 produkty CREATE TABLE (kod TEXT NOT NULL, produkt TEXT NOT NULL, ilość TEXT NOT NULL, cena TEXT NOT NULL)
Do programowania w Pythonie użyjemy NetBeans w tym samouczku, będziemy potrzebować wtyczki, którą możemy pobrać ze strony Netbeans Plugins.

Pobieramy plik, rozpakowujemy go, w folderze będziemy mieć wszystkie pliki i zależności do dodania do NetBeans.

Następnie otwieramy program Netbeans, potrzebujemy wersji 8.0.2 i przechodzimy do menu Narzędzia> Wtyczka, następnie przechodzimy do zakładki Pobrane i otworzy się okno dialogowe, w którym wybierzemy wszystkie wtyczki, które pobierzemy za pomocą klucza:

Shift +

Następnie klikniemy przycisk Instaluj, aby aktywować wtyczkę, a następnie ponownie uruchomimy NetBeans.

Następnie otwieramy NetBeans i przechodzimy do menu Plik> Nowy projekt i wybieramy opcję Python, a następnie Python Project.

Następnie przypiszemy nazwę naszemu projektowi oraz wersję pythona, która wykona kod, w tym przypadku wersję 2.7.6.

Teraz, gdy stworzyliśmy projekt, zamierzamy stworzyć interfejs do tego przechodzimy do projektanta Qt i stworzymy następujący ekran

Najpierw utworzymy projekt Qt Designer, przejdziemy do menu Plik>Nowy projekt i wybierzemy rodzaj ekranu, którego będziemy używać, będzie to okno główne.

Następnie umieścimy 4 etykiety widżetów, jeśli nie możemy ich znaleźć w polu widżetów po lewej stronie, będziemy musieli ich poszukać.

W polu właściwości po prawej stronie musimy przypisać każdemu z nich odpowiednią nazwę, a następnie zidentyfikować ją, z konwencjami kodu mielibyśmy następujące nazwy IblKod, lblProdukt, lbl Ilość Tak lblCena.
Mamy wiele właściwości do skonfigurowania każdego elementu, ale w tym samouczku użyjemy tych najbardziej podstawowych. Więc weźmiemy każdą etykietę i przeciągniemy ją na ekran, aby pozostawić ją w pożądanej pozycji.
Następnie umieścimy pola tekstowe lub LineEdit, każdemu z nich przypiszemy nazwę kod txt, txtProdukt, Ilość txt, cena txt. Będą to pola bazy danych z tymi polami tekstowymi wprowadzimy dane, które następnie zapiszemy.
Następnie postawimy 2 Naciśnij przycisk lub przyciski jeden będzie btZapisz wstawić dane do bazy danych i inne btUpdate aby zaktualizować listę danych.
Następnie dodamy tabelaWidget którego też będziemy musieli szukać w lewej kolumnie, przeciągamy go na ekran i nazywamy lista produktów tbl.
Następnie zapisujemy plik jako productlist.ui. w folderze, w którym znajduje się projekt, który stworzyliśmy netbeans.
Otwieramy okno terminala, aby przekonwertować plik z Lista produktów QT.ui do Pythona za pomocą następującego polecenia:
 puic4 lista produktów.ui> lista produktów.py
Kod projektu w Pythonie będzie następujący
 # - * - kodowanie: utf-8 - * - # Implementacja formularza wygenerowana z odczytanego pliku ui 'productlist.ui' # # Utworzono: Sun Nov 1 18:03:40 2015 # by: PyQt4 UI code generator 4.10.4 # # OSTRZEŻENIE! Wszystkie zmiany wprowadzone w tym pliku zostaną utracone! z PyQt4 importuj QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 z wyjątkiem AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transconambiguitext return. translate (context, text, disambig, _encoding) z wyjątkiem AttributeError: def _translate (context, text, disambig): return QtGui.QApplication.translate (context, text, disambig) class Ui_UIProducts (obiekt): def setupUi (self, UIProducts): UIProducts.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497, 374) self.centralwidget = QtGui.QWidget (UIProducts) self.centralwidget.setObjectName (_fromUtf8 ("centralwidgetGuiCodigo") self.lQLablidget.QugetGuiC self.lblCodigo.setGeometry (QtCore.QRect (20, 16, 56, 17)) self.lblCodigo.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblCodigo.setTextFormat (QtCore.Qt ).PlainText (QtCore.Qt) ).PlainText (QtCore.Qt ).PlainText self.lblCodigo.setObjectName (_fromUtf8 ("lblCodigo")) self.lblPrice = QtGui.QLabel (self.centralwidget) self.lblPrice.setGeo metryka (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 ("lbljectName () _fromUtf8 (" lbljectCan) )) self.txtCode = QtGui.QLineEdit (self.centralwidget) self.txtCode.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.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 ("linia")) self.btSave = QtGui.QPushButton (self.centralGwidget) self.btCoretry) self.btCoretry (QtCoretry) .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 (_fromUtf8 (") 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 (_fromUtf8 ("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.setGeometry (QtCore. 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 ("menubarductos").) setMenuBar (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctBrojectConnectUi (UIProctBroject)UitransName redef) : UIProducts.setWindowTitle (_translate ("UIProducts", "Lista produktów", Brak)) self.lblCodigo.setText (_translate ("U IProducts "," Kod ", Brak)) self.lblPrice.setText (_translate (" IProducts "," Cena ", Brak)) self.lblQuantity.setText (_translate (" UIProducts "," Ilość ", Brak)) self. btSave.setText (_translate ("UIProducts", "Save", Brak)) self.btUpdate.setText (_translate ("UIProducts", "Aktualizuj listę", Brak)) self.label.setText (_translate ("UIProducts", " Lista produktów ”, Brak)) self.lblProducto.setText (_translate („ UIProductos ”, „ Produkt ”, Brak)) self.tableWidget.setSortingEnabled (True)
Następnie stworzymy kolejny plik dla funkcjonalności projektowej zdefiniowanej w poprzednim:
 z PyQt4 import QtCore z PyQt4 import QtGui z PyQt4.QtCore import * z PyQt4.QtGui import * z listy produktów import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow): def __init = __ (brak). (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 Bazy Danych () self.conn = Brak self.cursor = Brak # Uruchamiamy bazę danych i tworzymy tabelę jeśli nie istnieje def Start Bazy Danych (self): self.conn = sqlite3.connect ("dbproducts.bd") cursor = self .conn.cursor () cursor.execute ("" "UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE produkty (kod TEXT NOT NULL, produkt TEXT NOT NULL, ilość TEXT NOT NULL, cena TEXT NOT NULL)" "") 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. ilość, self.price) cursor.execute ("WSTAW DO produktów (kod, produkt, ilość, cena) WARTOŚCI (?,?,?,?)", self.register) conn.commit() self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Record save", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect („dbproductos.bd”) # Wskazane dane są ładowane z tabeli cursor.execute („SELECT kod, produkt, ilość, cena FROM produktów”) 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 rows = len (table_numerinfo) self.ui.tableWidget.setCountowCountself.(self.setRow) numberoffi rows [0print)] dla j w zakresie (self.number of rows): wiersz = table_info [j] print j dla i w zakresie (0, len (wiersz)): item = wiersz [i] print 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_ ())
Wynik wykonania kodu będzie następujący:

Podobał Ci się i pomógł ten samouczek?Możesz nagrodzić autora, naciskając ten przycisk, aby dać mu pozytywny punkt
wave wave wave wave wave