Приложения с Sqlite база данни, PyQT и QT Desginer

Съдържание
Има и други API, които можете да използвате създаване на GUI приложения в Python например QT дизайнер което ви позволява да създавате приятно изглеждащи визуални интерфейси, а след това чрез библиотеките на PyQt автоматично да генерирате необходимия код на интерфейсите в Python с командата пиуичен, какво е а UI компилатор за QT какво идва с него PyQt пакет.

Урокът Кросплатформени приложения с Python, PyQT и QT Desginer 5, бяхме започнали как да инсталираме и конфигурираме python, pyqt и qt Определете в този урок ще използваме PyQT 4 от съображения за стабилност, може да се използва и с библиотеки на PyQt 5 .
В този урок ще създадем визуално приложение за свързване на база данни Sqlite 3 и ще определим функциите за запазване и показване на данни.
Ще започнем със създаването на базата данни в Sqlite за това можем да използваме софтуера Sqliteman, който може да се използва във всяка операционна система. Можем да го изтеглим и инсталираме, за да можем да управляваме базите данни Sqlite версия 3.

От официалния уебсайт можем да изтеглим версията за операционната система, която ни подхожда за нашето развитие.

След това стартираме Sqliteman и отиваме в менюто Файл> Нов файл и ние създаваме нашата база данни dbproducts.db.
След това отиваме в менюто Контекст> Създаване на таблица и създаваме таблицата с продукти.

SQL кодът може да бъде получен от същия софтуер, като щракнете с десния бутон върху името на таблицата и като използвате опцията Describe Table, полученият код ще бъде следният:
 СЪЗДАЙТЕ ТАБЛИЦА продукти (ТЕКСТ НЕ НУЛ код, ТЕКСТ НЕ НУЛ продукт, ТЕКСТ НЕ НУЛ количество, ТЕКСТ НЕ НУЛ цена)
За да програмираме в Python, ще използваме NetBeans в този урок, ще ни трябва приставка, която можем да изтеглим от уебсайта на Netbeans Plugins.

Изтегляме файла, разопаковаме го, в папката ще имаме всички файлове и зависимости, които да добавим към NetBeans.

След това отваряме програмата Netbeans, ще ни трябва версия 8.0.2 и отиваме в менюто Инструменти> Приставка, след това отиваме в раздела Изтеглени и ще се отвори диалогов прозорец, където ще изберем всички приставки, които изтегляме с ключа:

Shift +

След това ще кликнете върху бутона Инсталиране, за да активирате приставката, след което ще рестартираме NetBeans.

След това отваряме NetBeans и отиваме в менюто Файл> Нов проект и Избираме опцията Python и след това Python Project.

След това ще присвоим име на нашия проект и версията на python, която ще изпълни кода, в този случай версия 2.7.6.

След като създадохме проекта, ще създадем интерфейса за това, отиваме в Qt дизайнер и ще създадем следния екран

Първо ще създадем проекта Qt Designer, отиваме в менюто Файл> Нов проект и избираме типа екран, който ще използваме, той ще бъде Главен прозорец.

След това ще поставим 4 джаджа Label, ако не можем да го намерим в полето с джаджа вляво, ще трябва да го потърсим.

В полето за свойства вдясно трябва да присвоим на всяко от тях съответното име и след това да го идентифицираме, с кодовите конвенции бихме имали следните имена lblCode, lblПродукт, lbl Количество Y lblЦена.
Имаме много свойства за конфигуриране на всеки елемент, но в този урок ще използваме най -основните. Така че ние ще вземем всеки етикет и ще го плъзнем към екрана, за да го оставим в желаната от нас позиция.
След това ще поставим текстовите полета или LineEdit, на всяко от тях ще присвоим име txtCode, txtProduct, txt Количество, txtPrice. Това ще бъдат полетата на базата данни с тези текстови полета ще въведем данни, които след това ще запишем.
След това ще сложим 2 Натисни бутона или бутоните един ще бъде btSave за вмъкване на данни в базата данни и други btUpdate за актуализиране на списък с данни.
След това ще добавим а tableWidget което също ще трябва да търсим в лявата колона, плъзгаме го на екрана и го наименуваме tbl списък с продукти.
След това запазваме файла като productlist.ui. в папката, където е проектът, с който създадохме netbeans.
Отваряме терминален прозорец, от който да конвертираме файла QT productlist.ui към python, като използвате следната команда:
 puic4 productlist.ui> productlist.py
Кодът на дизайна на Python ще бъде следният
 # - * - кодиране: utf -8 - * - # Реализация на формуляр, генериран от четене на потребителски файл 'productlist.ui' # # Създаден: 1 ноември 18:03:40 2015 # от: PyQt4 UI генератор на код 4.10.4 # # ВНИМАНИЕ! Всички промени, направени в този файл, ще бъдат загубени! от PyQt4 импортирайте QtCore, QtGui опитайте: _fromUtf8 = QtCore.QString.fromUtf8 с изключение на AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transaugugui,, translate (context, text, disambig, _encoding), с изключение на AttributeError: def _translate (context, text, disambig): връщане на QtGui.QApplication.translate (context, text, disambig) class Ui_UIProducts (object): def setupUi (self, UIProducts): UIProducts.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497,337) 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 = 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.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.centralwCryt) .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.lblProduct.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 ("menubardus) (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("статусбар")) : 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 "," Количество ", Няма)) self. btSave.setText (_translate ("UIProducts", "Save", None)) self.btUpdate.setText (_translate ("UIProducts", "Update List", None)) self.label.setText (_translate ("UIProducts", " Списък на продуктите ", Няма)) self.lblProducto.setText (_translate (" UIProductos "," Продукт ", Няма)) self.tableWidget.setSortingEnabled (True)
След това ще създадем друг файл за функционалността на дизайна, дефинирана в предишната:
 от PyQt4 импортиране QtCore от PyQt4 импортиране QtGui от PyQt4.QtCore импортиране * от PyQt4.QtGui импортиране * от списък с продукти импортиране Ui_FrmProducts импортиране sqlite3 импортиране на sys клас FrmProducts (QtGui.QMainWindow): def __init __ (__. (самостоятелно, родител) Стартиране на базата данни () self.conn = Няма self.cursor = Няма # Стартираме базата данни и създаваме таблицата, ако тя не съществува. = self .conn.cursor () cursor.execute ("" "СЪЗДАЙТЕ ТАБЛИЦА, АКО НЕ СЪЩЕСТВУВАТ продукти ): conn = sqlite3.connect ("dbproducts.bd") курсор = 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. количество, собствена цена) cursor.execute ("INSERT INTO продукти (код, продукт, количество, цена) СТОЙНОСТИ? setText ("") conn.commit () QMessageBox.about (self, "Записът е запазен", "Забележка") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") курсор = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Посочените данни се зареждат от таблицата cursor.execute ("SELECT код, продукт, количество, цена ОТ продукти") 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_info) self.ui.tableWidget.setRowCount (self_ui.tableWidget.setRowCount numberoffi редове [0принт)] за j в обхват (самостоятелен брой редове): ред = table_info [j] печат j за i в обхват (0, len (ред)): item = ред [i] печат елемент item = str (елемент) newitem = QTableWidgetItem (елемент) self.ui.tableWidget.setItem (j, i , newitem) if __name__ == "__main__": app = QtGui.QApplication (sys.argv) myapp = FrmProducts () myapp.show () sys.exit (app.exec_ ())
Резултатът при изпълнение на кода ще бъде следният:

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave