En este capítulo del tutorial de Python 3 más PyQt5 seguimos con la continuación de la aplicación que estamos desarrollando desde los dos capítulos anteriores:
Seleccionar registros: http://jquery-manual.blogspot.com/2015/07/21-python-pyqt-interfaz-grafica-qtsql.html
Actualizar registros: http://jquery-manual.blogspot.com/2015/07/22-python-pyqt-interfaz-grafica-qtsql.html
En esta ocasión veremos como eliminar fila/s, para esta tarea incluiremos un botón al cuadro de diálogo que al hacer click sobre él, entrará en acción un método llamado Eliminar el cual contendrá el proceso de búsqueda del index de la/s fila/s seleccionada/s por el usuario y su posterior eliminación tanto del objeto table como de la tabla usuarios.
administrar.pyw
import sys from PyQt5.QtWidgets import QApplication, QDialog, QGridLayout, QMessageBox, QTableWidget, QTableWidgetItem, QPushButton from PyQt5 import uic from PyQt5.QtSql import QSqlDatabase, QSqlQuery class Dialogo(QDialog): def __init__(self): QDialog.__init__(self) self.setWindowTitle("Administrar usuarios") #Título self.resize(800, 600) #Tamaño inicial self.layout = QGridLayout() #Crear un layout grid self.setLayout(self.layout) #Agregar el layout al cuadro de diálogo self.table = QTableWidget() #Crear la tabla self.btn_eliminar = QPushButton("Eliminar fila/s") self.layout.addWidget(self.btn_eliminar) self.layout.addWidget(self.table) #Agregar la tabla al layout #Establecer conexión a la base de datos MySql self.db = QSqlDatabase.addDatabase('QMYSQL') self.db.setHostName("localhost") self.db.setDatabaseName("usuarios") self.db.setUserName("root") self.db.setPassword("password") self.Seleccionar() self.table.itemChanged.connect(self.Actualizar) self.btn_eliminar.clicked.connect(self.Eliminar) def Seleccionar(self): estado = self.db.open() if estado == False: QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard) else: self.table.setColumnCount(3) self.table.setHorizontalHeaderLabels(['id', 'nombre', 'edad']) row = 0 sql = "SELECT * FROM usuarios" query = QSqlQuery(sql) while query.next(): self.table.insertRow(row) id = QTableWidgetItem(str(query.value(0))) nombre = QTableWidgetItem(str(query.value(1))) edad = QTableWidgetItem(str(query.value(2))) self.table.setItem(row, 0, id) self.table.setItem(row, 1, nombre) self.table.setItem(row, 2, edad) row = row + 1 self.db.close() def Actualizar(self): estado = self.db.open() if estado == False: QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard) else: column = self.table.currentColumn() row = self.table.currentRow() id = self.table.item(row, 0).text() value = self.table.currentItem().text() columns = ['id', 'nombre', 'edad'] query = QSqlQuery() sql = "UPDATE usuarios SET " + columns[column] + "=" + ":value WHERE id=:id" query.prepare(sql) query.bindValue(":id", id) query.bindValue(":value", value) estado = query.exec_() if estado == False: QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard) self.db.close() def Eliminar(self): estado = self.db.open() if estado == False: QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard) else: rows = self.table.selectionModel().selectedRows() index = [] for i in rows: index.append(i.row()) index.sort(reverse=True) for i in index: id = self.table.item(i, 0).text() self.table.removeRow(i) sql = "DELETE FROM usuarios WHERE id=:id" query = QSqlQuery() query.prepare(sql) query.bindValue(":id", id) estado = query.exec_() if estado == False: QMessageBox.warning(self, "Error", self.db.lastError().text(), QMessageBox.Discard) self.db.close() app = QApplication(sys.argv) dialogo = Dialogo() dialogo.show() app.exec_()
No hay comentarios:
Publicar un comentario