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