Aplikacije sa Sqlite Database, PyQT i QT Desginer

Sadržaj
Postoje i drugi API -ji koje možete omogućiti stvoriti GUI aplikacije u Pythonu na primjer QT dizajner što vam omogućuje stvaranje lijepih vizualnih sučelja, a zatim kroz knjižnice PyQt automatski generira potreban kod sučelja u Pythonu naredbom pyuic, što je a UI kompajler za QT što dolazi s tim PyQt paket.

Upute Cross-platform aplikacije s Python-om, PyQT-om i QT Desginer-om 5, počeli smo instalirati i konfigurirati python, pyqt i qt. U ovom ćemo vodiču koristiti PyQT 4 iz razloga stabilnosti, može se koristiti i s knjižnicama PyQt 5 .
U ovom ćemo vodiču stvoriti vizualnu aplikaciju za povezivanje baze podataka Sqlite 3 i definirati funkcije za spremanje i prikaz podataka.
Počet ćemo stvaranjem baze podataka u Sqlite -u. Za to možemo koristiti softver Sqliteman koji se može koristiti u bilo kojem operativnom sustavu. Možemo ga preuzeti i instalirati kako bismo mogli upravljati bazama podataka Sqlite verzije 3.

Sa službene web stranice možemo preuzeti verziju operacijskog sustava koja nam odgovara za naš razvoj.

Zatim pokrećemo Sqliteman i idemo na izbornik Datoteka> Nova datoteka i stvaramo našu bazu podataka dbproducts.db.
Zatim idemo na jelovnik Kontekst> Izradi tablicu i izrađujemo tablicu proizvoda.

SQL kôd može se dobiti iz istog softvera desnim klikom na naziv tablice i pomoću opcije Opisi tablicu, rezultirajući kôd bit će sljedeći:
 KREIRAJTE TABELNE proizvode (TEKST NIJE NULA šifra, TEKST NE NULA proizvod, TEKST NIJE NULA količina, TEKST NIJE NULA cijena)
Za programiranje na Pythonu koristit ćemo NetBeans u ovom vodiču, trebat će nam dodatak koji možemo preuzeti s web stranice dodataka Netbeans.

Preuzimamo datoteku, raspakiramo je, unutar mape ćemo imati sve datoteke i ovisnosti za dodavanje u NetBeans.

Zatim otvorimo program Netbeans koja će nam trebati verzija 8.0.2 i otići na izbornik Alati> Dodatak, zatim idemo na karticu Preuzeto i otvorit će se dijaloški okvir u kojem ćemo odabrati sve dodatke koje preuzimamo s ključem:

Shift +

Zatim ćemo kliknuti gumb Instaliraj za aktiviranje dodatka, a zatim ćemo ponovno pokrenuti NetBeans.

Zatim otvorimo NetBeans i idemo na izbornik Datoteka> Novi projekt i Odabiremo opciju Python, a zatim Python Project.

Tada ćemo našem projektu dodijeliti ime i verziju pythona koja će izvršiti kôd, u ovom slučaju verziju 2.7.6.

Sada kada smo stvorili projekt, kreirat ćemo sučelje za to, idemo na Qt designer i stvorit ćemo sljedeći zaslon

Prvo ćemo stvoriti projekt Qt Designer, otići na izbornik Datoteka> Novi projekt i odabrati vrstu ekrana koji ćemo koristiti, to će biti Glavni prozor.

Zatim ćemo staviti oznaku 4 widgeta, ako je ne možemo pronaći u okviru widgeta s lijeve strane, morat ćemo je potražiti.

U okviru svojstava s desne strane svakom moramo dodijeliti odgovarajuće ime, a zatim ga identificirati, s konvencijama koda bismo imali sljedeće nazive lblCode, lblProizvod, lbl Količina Y lblCijena.
Imamo mnogo svojstava za konfiguriranje svakog elementa, ali u ovom ćemo vodiču koristiti najosnovnija. Zato ćemo uzeti svaku oznaku i povući je na zaslon kako bismo je ostavili u željenom položaju.
Zatim ćemo staviti tekstualne okvire ili LineEdit, svakom dodijeliti ime txtCode, txtProduct, txt Količina, txtCijena. To će biti polja baze podataka s tim okvirima za tekst koje ćemo unijeti podatke koje ćemo tada spremiti.
Zatim ćemo staviti 2 Tipkalo ili gumbi jedan će biti btSačuvaj za umetanje podataka u bazu podataka i drugo btUpdate za ažuriranje popisa podataka.
Zatim ćemo dodati a tableWidget koje ćemo također morati potražiti u lijevom stupcu, povučemo ga na zaslon i imenujemo tbl popis proizvoda.
Zatim spremamo datoteku kao productlist.ui. u mapi u kojoj se nalazi projekt s kojim smo stvorili netbeans.
Otvaramo prozor terminala iz kojeg možemo pretvoriti datoteku QT popis proizvoda.ui na python pomoću sljedeće naredbe:
 puic4 productlist.ui> productlist.py
Python kod dizajna bit će sljedeći
 # - * - kodiranje: utf -8 - * - # Implementacija obrasca generirana čitanjem datoteke korisničkog sučelja 'productlist.ui' # # Stvoreno: ned 1. studenoga 18:03:40 2015 # od: PyQt4 Generator korisničkog sučelja 4.10.4 # # UPOZORENJE! Sve promjene napravljene u ovoj datoteci bit će izgubljene! iz PyQt4 unesite QtCore, QtGui pokušajte: _fromUtf8 = QtCore.QString.fromUtf8 osim AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transaigument, (povratni kontekst, translate (context, text, disambig, _encoding) osim 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 (_fromUtgodibodik) " 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 metrija (QtCore.QRect (260, 40, 56, 17)) self.lblPrice.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblPrice.setObjectName (_fromUtf8 ("lblPrice")) self.lblQuantity = QtGu (self.centralwidget) self.lblAmount.setGeometry (QtCore.QRect (20, 46, 56, 17)) self.lblAmount.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblAmount.setObjectName (_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.txtQuanti = .QLineEdit (self. Centralwidget) self.txtAmount.setGeometry (QtCore.QRect (90, 40, 113, 27)) self.txtAmount.setObjectName (_fromUtf8 ("txtAmount")) self.line = QtGui.QFrame (self.centralwid ) 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 ("linija")) self.btSave = QtGui.QPushButton (self.centralwCetGet) .btCoretry (QtGetry) .QRect (140, 80, 91, 27)) self.btSave.setMinimumSize (QtCore.QSize (91, 0)) self.btSave.setObjectName (_fromUtf8 ("btSave")) self.btUp .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.lblProDukt.setO ("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. 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 ("menubarduk)) (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) : UIProducts.setWindowTitle (_translate ("UIProducts", "List proizvoda", Ništa)) 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", " Popis proizvoda ", nema)) self.lblProducto.setText (_translate (" UIProductos "," Proizvod ", nema)) self.tableWidget.setSortingEnabled (True)
Zatim ćemo stvoriti drugu datoteku za funkcionalnost dizajna definiranu u prethodnoj:
 iz PyQt4 uvoz QtCore iz PyQt4 uvoz QtGui iz PyQt4.QtCore uvoz * iz PyQt4.QtGui uvoz * sa popisa proizvoda uvoz Ui_FrmProducts uvoz sqlite3 import sys klase FrmProducts (QtGui.QMainWindow): def __init __ (__. roditelj____ __init __ (samo, roditelj) Pokreni bazu podataka () self.conn = Nema self.cursor = Nema # Pokrećemo bazu podataka i stvaramo tablicu ako ne postoji def Pokreni bazu podataka (self): self.conn = sqlite3.connect ("dbproducts.bd") kursor = self .conn.cursor () cursor.execute ("" "NAPRAVI TABELU AKO NE POSTOJI proizvodi (TEXT NOT NULL code, TEXT NOT NULL product, TEXT NOT NULL količina, TEXT NOT NULL cijena)" "") 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. količina, vlastita cijena) cursor.execute ("INSERT INTO proizvodi (kod, proizvod, količina, cijena) VRIJEDNOSTI (?,?,?,?)", 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") # Navedeni podaci učitavaju se iz tablice cursor.execute ("SELECT kod, proizvod, količina, cijena IZ proizvoda") 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.broj redova = len (table_info) self.ui.tableWidget.setRnuCount numerirani redovi [0print)] za j u rasponu (vlastiti broj redaka): redak = table_info [j] ispis j za i u rasponu (0, len (red)): item = row [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_ ())
Rezultat prilikom izvršavanja koda bit će sljedeći:

Je li vam se svidio i pomogao ovaj vodič?Autor možete nagraditi pritiskom na ovaj gumb kako biste mu dali pozitivan bod
wave wave wave wave wave