En este capítulo del tutorial de Python 3 más PyQt5 continuamos realizando consultas a bases de datos MySQL, basándonos en la aplicación del capítulo anterior: http://jquery-manual.blogspot.com.es/2015/07/21-python-pyqt-interfaz-grafica-qtsql.html donde pudimos ver como seleccionar los registros de la tabla usuarios para incluirlos en un objeto de la clase QTableWidget, este objeto es de gran utilidad para mantener un enlace directo con la base de datos, ya que permite la edición de campos (items). El objetivo es actualizar un determinado campo cada vez que el usuario ha realizado una modificación en el mismo, y para ello haremos uso del evento itemChanged de la clase QTableWidget.
administrar.pyw
import sys from PyQt5.QtWidgets import QApplication, QDialog, QGridLayout, QMessageBox, QTableWidget, QTableWidgetItem 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.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) 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() app = QApplication(sys.argv) dialogo = Dialogo() dialogo.show() app.exec_()
No hay comentarios:
Publicar un comentario