Aplicativos com banco de dados Sqlite, PyQT e QT Desginer

Índice
Existem outras APIs que podem criar aplicativos GUI em Python como por exemplo QT Designer que permite que você crie interfaces visuais de boa aparência e, em seguida, por meio das bibliotecas PyQt, gere automaticamente o código necessário das interfaces em Python com o comando pyuic, que e um Compilador de IU para QT o que vem com isso Pacote PyQt.

O tutorial Aplicativos multiplataforma com Python, PyQT e QT Desginer 5, tínhamos começado como instalar e configurar python, pyqt e qt. Designar neste tutorial usaremos PyQT 4 por razões de estabilidade, ele também pode ser usado com bibliotecas PyQt 5 .
Neste tutorial, vamos criar um aplicativo visual para conectar um banco de dados Sqlite 3 e definir as funções para salvar e exibir dados.
Começaremos criando o banco de dados em Sqlite para isso podemos usar o software Sqliteman que pode ser usado em qualquer sistema operacional. Podemos fazer o download e instalá-lo para poder gerenciar bancos de dados Sqlite versão 3.

Do site oficial podemos baixar a versão do sistema operacional que mais nos convém para o nosso desenvolvimento.

Em seguida, iniciamos o Sqliteman e vamos para o menu Arquivo> Novo Arquivo e nós criamos nosso banco de dados dbproducts.db.
Então vamos para o menu Contexto> Criar Tabela e criamos a tabela de produtos.

O código SQL pode ser obtido no mesmo software clicando com o botão direito do mouse no nome da tabela e usando a opção Descrever Tabela, o código resultante será o seguinte:
 CREATE TABLE products (código TEXT NOT NULL, produto TEXT NOT NULL, quantidade TEXT NOT NULL, preço TEXT NOT NULL)
Para programar em Python, usaremos o NetBeans neste tutorial, precisaremos de um plug-in que podemos baixar do site de plug-ins do Netbeans.

Baixamos o arquivo, descompactamos, dentro da pasta teremos todos os arquivos e dependências para adicionar ao NetBeans.

Em seguida, abrimos o programa Netbeans, vamos precisar da versão 8.0.2 e ir para o menu Ferramentas> Plug-in, em seguida, vamos para a guia Baixados e uma caixa de diálogo será aberta, onde selecionaremos todos os plug-ins que baixamos com a chave:

Shift +

Em seguida, clicaremos no botão Instalar para ativar o plug-in e reiniciaremos o NetBeans.

Em seguida, abrimos o NetBeans e vamos para o menu Arquivo> Novo Projeto e selecionamos a opção Python e, em seguida, Projeto Python.

Em seguida, atribuiremos um nome ao nosso projeto e a versão do python que executará o código, neste caso a versão 2.7.6.

Agora que criamos o projeto, vamos criar a interface para isso, vamos ao Qt designer e criaremos a seguinte tela

Vamos primeiro criar o projeto Qt Designer, ir ao menu Arquivo> Novo Projeto e selecionar o tipo de tela que vamos usar, que será a Janela Principal.

Em seguida, colocaremos 4 etiqueta de widget, se não conseguirmos encontrá-lo na caixa de widget à esquerda, teremos que procurá-lo.

Na caixa de propriedades à direita devemos atribuir a cada um o seu respectivo nome e depois identificá-lo, com as convenções de código teríamos os seguintes nomes lblCode, lblProduct, Quantidade lbl Y lblPrice.
Temos muitas propriedades para configurar cada elemento, mas neste tutorial usaremos as mais básicas. Portanto, vamos pegar cada rótulo e arrastá-lo para a tela para deixá-lo na posição que desejamos.
Em seguida, colocaremos as caixas de texto ou LineEdit, a cada uma atribuímos um nome txtCode, txtProduct, Quantidade txt, txtPrice. Esses serão os campos do banco de dados com essas caixas de texto, inseriremos os dados que depois salvaremos.
Em seguida, colocaremos 2 Botão de apertar ou botões um será btSave para inserir dados no banco de dados e outros btUpdate para atualizar uma lista de dados.
Então vamos adicionar um tableWidget que também teremos que procurar na coluna da esquerda, arrastamos para a tela e o nomeamos lista de produtos tbl.
Em seguida, salvamos o arquivo como productlist.ui. na pasta onde está o projeto que criamos com netbeans.
Abrimos uma janela de terminal para converter o arquivo de QT productlist.ui para python usando o seguinte comando:
 puic4 productlist.ui> productlist.py
O código Python do design será o seguinte
 # - * - coding: utf-8 - * - # Implementação do formulário gerado a partir da leitura do arquivo ui 'productlist.ui' # # Criado: Dom Nov 1 18:03:40 2015 # por: PyQt4 UI code generator 4.10.4 # # AVISO! Todas as alterações feitas neste arquivo serão perdidas! de PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 exceto AttributeError: def _fromUtf8 (s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _transambigui, deslocamento de contexto, retorno de contexto (contexto Gui, retorno de deslocamento (contexto Gui, retorno de retorno (contexto Gui). traduzir (contexto, texto, desambiguação, _encoding) exceto AttributeError: def _translate (contexto, texto, desambiguação): return QtGui.QApplication.translate (contexto, texto, desambiguação) classe Ui_UIProducts (objeto): def setupUi (self, UIProducts): UIProducts.setObjectName (_fromUtf8 ("UIProductos")) UIProductos.resize (497, 374) self.centralwidget = QtGui.QWidget (UIProducts) self.centralwidget.setObjectName (_fromUtfdidget) 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 metry (QtCore.QRect (260, 40, 56, 17)) self.lblPrice.setMaximumSize (QtCore.QSize (16777215, 17)) self.lblPrice.setObjectName (_fromUtf8 ("lblPrice")) self.lblQuantity = QtGui.QL (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 ("line")) self.btSave = QtGui.QPushButton (self.centralwidget) self.btCoretry (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 (_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.setObjectName8 ("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"). (self.menubar) self.statusbar = QtGui.QStatusBar (UIProducts) self.statusbar.setObjectName (_fromUtf8 ("statusbar")) UIProducts.setStatusBar (self.statusbar) self.retranslateductosMUIProductosMenuctosMenuctosMUIProductos (UIProductosMenuctosMenuctos) : UIProducts.setWindowTitle (_translate ("UIProducts", "Lista de Produtos", Nenhum)) 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 de produtos ", Nenhum)) self.lblProducto.setText (_translate (" UIProductos "," Produto ", Nenhum)) self.tableWidget.setSortingEnabled (True)
A seguir, criaremos outro arquivo para a funcionalidade de design definida no anterior:
 from PyQt4 import QtCore from PyQt4 import QtGui from PyQt4.QtCore import * from PyQt4.QtGui import * from product list import Ui_FrmProducts import sqlite3 import sys class FrmProducts (QtGui.QMainWindow _ parent): def __init _ _ None_ (self_init _ None). (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. Iniciar banco de dados () self.conn = Nenhum self.cursor = Nenhum # Iniciamos o banco de dados e criamos a tabela se ela não existir def Iniciar banco de dados (self): self.conn = sqlite3.connect ("dbproducts.bd") cursor = self .conn.cursor () cursor.execute ("" "CREATE TABLE IF NOT EXISTS products (código TEXT NOT NULL, produto TEXT NOT NULL, quantidade TEXT NOT NULL, preço 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. quantidade, auto.preço) cursor.execute ("INSERT INTO produtos (código, produto, quantidade, preço) VALORES (?,?,?,?)", self.register) conn.commit () self.ui.lineEdit. setText ("") conn.commit () QMessageBox.about (self, "Registro salvo", "Notice") def Update_click (self): conn = sqlite3.connect ("dbproductos.bd") cursor = conn.cursor () # self.con = sqlite3.connect ("dbproductos.bd") # Os dados indicados são carregados da tabela cursor.execute ("SELECT código, produto, quantidade, preço de produtos") 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.numerCount.setRowCount (self. numberoffi rows [0print)] para j no intervalo (self.number of rows): row = table_info [j] print j para i no intervalo (0, len (row)): 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_ ())
O resultado ao executar o código será o seguinte:

Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo
wave wave wave wave wave