miércoles, 22 de junio de 2016

¿CÓMO VISUALIZAR BASE DE DATOS MYSQL EN PyQT-PYTHON?

Hola a todos esta vez se va a exportar la información contenida en una base de datos MySQL, en la interfaz gráfica de PyQT con la ayuda de Python.

1. PASO: Crear la interfaz gráfica en QT:

Se debe crear un nuevo archivo y se escoge el Dialog without Buttons y luego create. Esta interfaz la guardé con el nombre de Base.ui





2. PASO:  Insertar el Table View en nuestra ventana:

Como se observa en la imagen, se debe insertar un table View dentro de nuestra ventana Dialog y lo ajustamos al tamaño de la ventana.



3. PASO: Convertir el archivo generado en extensión .ui de QT a .py de Python:
Si aún no sabes convertir de .ui a .py dejo este enlace también hecho por mí haciendo la conversión:


Este es el código generado en esa conversión.

Base.py
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'Base.ui'
#
# Created by: PyQt4 UI code generator 4.11.4
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(726, 300)
        self.tableView = QtGui.QTableView(Dialog)
        self.tableView.setGeometry(QtCore.QRect(20, 10, 691, 271))
        self.tableView.setObjectName(_fromUtf8("tableView"))

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))

4. PASO: Generar el archivo que consultará la base de datos y utilizará la interfaz gráfica:

A este archivo lo llamé prueba.py y vease lo importante de este código al importar las librerías de PyQt4 para usarlas con base de datos. ( Recuerde que este ejemplo sólo aplica para bases de datos MYSQL)


import sys
from Base import *
from PyQt4 import QtSql, QtGui

def createConnection():
    db = QtSql.QSqlDatabase.addDatabase('QMYSQL') #no se modifica.
    db.setHostName('localhost') # lo cambian por el nombre que le hayan dado al Host.
    db.setDatabaseName('red_fibra') #Lo cambian por el nombre de la base de datos.
    db.setUserName('root') #Lo cambian por el nombre de usuario de su base de datos.
    db.setPassword('root123') #Lo cambian por la contraseña de su base de datos.
    db.open()
    print (db.lastError().text())
    return True

class MyForm(QtGui.QDialog):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.model = QtSql.QSqlTableModel(self)
        self.model.setTable("red3") #Nombre de la tabla que desean en su base de datos
        self.model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
        self.model.select()
        self.ui.tableView.setModel(self.model)
           
if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    if not createConnection():
        sys.exit(1)
    myapp = MyForm()
    myapp.show()
    sys.exit(app.exec_())

Al finalizar este va a ser el resultado.

Espero les haya servido, si tienen alguna duda con gusto la resolveré.

5 comentarios:

  1. Hola, que tal ?

    La base de datos y la totalidad del código donde lo puedo bajar ?

    Muchas gracias. Buen trabajo...

    ResponderBorrar
    Respuestas
    1. Hola. Gracias por visitar el Blog. Le hago la siguiente pregunta: ¿ Ya sabe el manejo de base de datos en MySQL?

      Borrar
  2. Buenas! una duda muy grande soy novato y trato de hacer lo mismo con sqlite3 pero no veo los datos de la base de datos en la tableview, alguna sugerancia .

    ResponderBorrar
  3. buenas tardes soy nuevo en el tema quisiera saber como hacer en para PYQT5

    ResponderBorrar
  4. hola buen buen dia quisiera saber como hacer esto en pyqt5 ya que eso ya no funciona con pyqt5

    ResponderBorrar