Hace unos días re-re-re-re-tome PyQT4 & SQLite, con lo que se me ocurrió hacer un programa (a forma de práctica) que me ayude a manejar el Stock de productos, con opción de:
- Eliminar Producto
- Agregar Producto
- Actualizar Producto
Para Editar o Actualizar Producto primero debemos seleccionar el producto y posteriormente dar clic en el botón de la acción que deseamos realizar
Actualizar Producto:
Agregar Producto:
Sin más preámbulos , el código:
Código
# -*- coding: cp1252 -*- from PyQt4 import QtCore, QtGui import sys, sqlite3 try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s class Formulario(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setFixedSize(591, 471) self.gridLayout = QtGui.QGridLayout(self) self.label = QtGui.QLabel(self) self.gridLayout.addWidget(self.label, 0, 0, 1, 2) self.treeWidget = QtGui.QTreeWidget(self) self.treeWidget.header().setDefaultSectionSize(150) self.gridLayout.addWidget(self.treeWidget, 1, 0, 1, 3) self.boton_eliminar = QtGui.QPushButton(self) self.gridLayout.addWidget(self.boton_eliminar, 2, 0, 1, 1) self.boton_agregar = QtGui.QPushButton(self) self.gridLayout.addWidget(self.boton_agregar, 2, 1, 1, 1) self.boton_actualizar = QtGui.QPushButton(self) self.gridLayout.addWidget(self.boton_actualizar, 2, 2, 1, 1) self.setWindowTitle("Visualizador de Stock") self.label.setText(_fromUtf8("Información del stock actual:")) self.treeWidget.headerItem().setText(0, "ID") self.treeWidget.headerItem().setText(1, "Producto") self.treeWidget.headerItem().setText(2, "Precio unitario") self.treeWidget.headerItem().setText(3, "Cantidad") __sortingEnabled = self.treeWidget.isSortingEnabled() self.treeWidget.setSortingEnabled(False) self.conexion = sqlite3.connect("stock.db") self.controla = self.conexion.cursor() try: self.controla.execute("CREATE TABLE stock (id int, nombre text, precio int, cantidad int)") self.controla.execute("INSERT INTO stock VALUES (1, 'Producto Demo', 2500, 100)") self.commit() except: pass self.treeWidget.setSortingEnabled(__sortingEnabled) self.boton_eliminar.setText("Eliminar producto") self.boton_agregar.setText("Agregar producto") self.boton_actualizar.setText(_fromUtf8("Actualizar información")) self.connect(self.boton_eliminar, QtCore.SIGNAL("clicked()"), self.eliminar) self.connect(self.boton_agregar, QtCore.SIGNAL("clicked()"), self.agregar) self.connect(self.boton_actualizar, QtCore.SIGNAL("clicked()"), self.actualizar) self.connect(self.treeWidget, QtCore.SIGNAL("itemPressed(QTreeWidgetItem*, int)"), self.seleccion) self.carga() def carga(self): self.treeWidget.reset() self.controla.execute("SELECT * FROM stock") l = 0 for row in self.controla: item_0 = QtGui.QTreeWidgetItem(self.treeWidget) id, nombre, precio, cantidad = row self.treeWidget.topLevelItem(l).setText(0, str(id)) self.treeWidget.topLevelItem(l).setText(1, nombre) self.treeWidget.topLevelItem(l).setText(2, str(precio)) self.treeWidget.topLevelItem(l).setText(3, str(cantidad)) item_0 = QtGui.QTreeWidgetItem(self.treeWidget) l = l + 1 self.conexion.commit() def agregar(self): agregar.show() def seleccion(self, qt, i): self.item = self.treeWidget.currentItem() self.id_prod = self.item.text(0) self.nombre_prod = self.item.text(1) self.precio_prod = self.item.text(2) self.cantidad_prod = self.item.text(3) def eliminar(self): if self.id_prod: reply = QtGui.QMessageBox.question(self, 'Message', _fromUtf8('¿Estás seguro?'), QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes) if reply == QtGui.QMessageBox.Yes: self.controla.execute("DELETE FROM stock WHERE id = %s" % self.id_prod) self.conexion.commit() self.carga() def actualizar(self): actualizar.cargador(str(self.id_prod), self.nombre_prod, str(self.precio_prod), str(self.cantidad_prod)) actualizar.show() class Agregar(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.setFixedSize(400, 151) self.gridLayout = QtGui.QGridLayout(self) self.label_nombre = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_nombre, 0, 0, 1, 1) self.input_nombre = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_nombre, 0, 2, 1, 1) self.label_precio = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_precio, 1, 0, 1, 1) self.input_precio = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_precio, 1, 2, 1, 1) self.label_cantidad = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_cantidad, 2, 0, 1, 2) self.input_cantidad = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_cantidad, 2, 2, 1, 1) self.input_id = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_id, 3, 2, 1, 1) self.label_id = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_id, 3, 0, 1, 1) self.boton_agregar = QtGui.QPushButton(self) self.gridLayout.addWidget(self.boton_agregar, 4, 0, 1, 3) self.setWindowTitle("Agregar producto") self.label_nombre.setText("Nombre:") self.label_precio.setText("Precio:") self.label_cantidad.setText("Cantidad:") self.label_id.setText("ID:") self.boton_agregar.setText("Agregar") self.connect(self.boton_agregar, QtCore.SIGNAL("clicked()"), self.agregar_producto) def agregar_producto(self): self.conexion = sqlite3.connect("stock.db") self.get = self.conexion.cursor() id = str(self.input_id.text()) nombre = str(self.input_nombre.text()) precio = str(self.input_precio.text()) cantidad = str(self.input_cantidad.text()) query = "SELECT * FROM stock WHERE id = %s" % id if self.get.execute(query).fetchone() != None: QtGui.QMessageBox.question(self, 'Alerta', _fromUtf8('El ID ya está asociado a otro producto.')) else: self.get.execute("INSERT INTO stock VALUES (%s, '%s', %s, %s)" % (int(id), nombre, int(precio), int(cantidad))) self.conexion.commit() form.carga() self.hide() class Actualizar(QtGui.QWidget): def __init__(self): QtGui.QWidget.__init__(self) self.setFixedSize(400, 151) self.gridLayout = QtGui.QGridLayout(self) self.label_nombre = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_nombre, 0, 0, 1, 1) self.input_nombre = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_nombre, 0, 2, 1, 1) self.label_precio = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_precio, 1, 0, 1, 1) self.input_precio = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_precio, 1, 2, 1, 1) self.label_cantidad = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_cantidad, 2, 0, 1, 2) self.input_cantidad = QtGui.QLineEdit(self) self.gridLayout.addWidget(self.input_cantidad, 2, 2, 1, 1) self.label_id = QtGui.QLabel(self) self.gridLayout.addWidget(self.label_id, 3, 0, 1, 1) self.input_id = QtGui.QLineEdit(self) self.input_id.setDisabled(True) self.gridLayout.addWidget(self.input_id, 3, 2, 1, 1) self.boton_actualizar = QtGui.QPushButton(self) self.gridLayout.addWidget(self.boton_actualizar, 4, 0, 1, 3) self.setWindowTitle("Agregar producto") self.label_nombre.setText("Nombre:") self.label_precio.setText("Precio:") self.label_cantidad.setText("Cantidad:") self.label_id.setText("ID:") self.boton_actualizar.setText("Actualizar") self.connect(self.boton_actualizar, QtCore.SIGNAL("clicked()"), self.actualizar) def cargador(self, id="", nombre="", precio="", cantidad=""): self.input_id.setText(id) self.input_nombre.setText(nombre) self.input_precio.setText(precio) self.input_cantidad.setText(cantidad) def actualizar(self): self.id = str(self.input_id.text()) self.nombre = str(self.input_nombre.text()) self.precio = str(self.input_precio.text()) self.cantidad = str(self.input_cantidad.text()) self.conexion = sqlite3.connect("stock.db") self.get = self.conexion.cursor() query = "UPDATE stock SET nombre = '%s', precio = %s, cantidad = %s WHERE id = %s " % (self.nombre, int(self.precio), int(self.cantidad), int(self.id)) try: self.get.execute(query) self.conexion.commit() form.carga() self.hide() QtGui.QMessageBox.question(self, 'Alerta', _fromUtf8('Producto actualizado correctamente.')) except: QtGui.QMessageBox.question(self, 'Alerta', _fromUtf8('No se pudo actualizar.')) app = QtGui.QApplication(sys.argv) actualizar = Actualizar() agregar = Agregar() form = Formulario() form.show() app.exec_()
Fuente: http://codigo.ga/python/python-qt4-manejo-de-stock-sencillo-v1-jaavier/