viernes, 24 de julio de 2015

21 - Python PyQt (Interfaz gráfica) - QtSql MySQL y QTableWidget (Seleccionar registros)




En este capítulo del tutorial de Python 3 más PyQt5 continuamos viendo como realizar consultas a bases de datos MySQL, en el capítulo anterior: http://jquery-manual.blogspot.com/2015/07/20-python-pyqt-interfaz-grafica-qtsql.html ya vimos como insertar registros en una tabla llamada 'usuarios' y en esta ocasión empezaremos con la construcción de una aplicación que nos permita administrar dicha tabla, es decir, seleccionar, editar y eliminar. Concretamente en este capítulo veremos como seleccionar todos los registros e incluir fila a fila en un objeto de la clase QTableWidget con sus respectivas columnas, filas y campos.

Más información sobre la clase QTableWidget: http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidget.html 

Más información sobre la clase QTableWidgetItem: http://pyqt.sourceforge.net/Docs/PyQt4/qtablewidgetitem.html



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()
  
 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()
     
app = QApplication(sys.argv)
dialogo = Dialogo()
dialogo.show()
app.exec_()