Fundamentos de python con orientación a objetos y basado en problemas con bases de datos
-
Upload
universidad-de-san-buenaventura-medellin -
Category
Engineering
-
view
571 -
download
2
Transcript of Fundamentos de python con orientación a objetos y basado en problemas con bases de datos
![Page 1: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/1.jpg)
Fundamentos de Python con Orientación a Objetos y Basado en Problemas
Caso Gestión Información de Proyectos con Bases de Datos
1. El Problema
Profesor: Carlos Arturo Castro Castro
El departamento de gestión de proyectos de una empresa desea manejar la información de sus proyectos
mediante una base de datos. De cada proyecto se tiene el código, título, fecha de inicio, fecha de finalización,
costo y los responsables de desarrollarlo. De cada responsable se conoce el código, nombre, teléfono fijo y
de algunos de ellos, el teléfono móvil. Una persona puede ser responsable de algunas actividades de varios
proyectos a la vez. Se conoce la fecha de asignación de un responsable a una actividad determinada. Una
actividad puede ser desarrollada por varios responsables. De cada actividad se conoce código, descripción,
fecha de inicio y fecha de finalización. La fecha de finalización de una actividad no puede ser superior a la
fecha de finalización del proyecto al que pertenece la actividad.
El Modelo Relacional Versión1 se presenta a continuación:
Nota: La clave primaria de la tabla resp_act_proy es la combinación de: CODRESP+CODACTIV+CODPROY
Elaborar un programa en Python que cargue un formulario con un menú con las opciones:
1.Proyectos 2. Actividades 3. Responsables 4. ActividadesxProyectos con Responsables 5. Listados
6. Terminar
Si se selecciona Proyectos, Cargar un formulario con los cuadros de texto Código, Nombre, Teléfono Fijo,
Teléfono Móvil y los botones para Ingresar, Consultar, Modificar y Borrar un Proyecto.
Si se selecciona Actividades, Cargar un formulario con los cuadros de texto y los botones para Ingresar,
Consultar, Modificar y Borrar una actividad.
Si se selecciona Responsables, Cargar un formulario con los cuadros de texto y los botones para Ingresar,
Consultar, Modificar y Borrar Un responsable.
Si se selecciona ActividadesxProyectos con Responsables Cargar un formulario con los cuadros de texto y
los botones para Ingresar, Consultar, Modificar y Borrar ActividadesxProyectos con Responsables.
Si selecciona Listados, Mostrar un formulario con los botones: 1 Listado de Proyectos con sus actividades. 2.
Listados de Responsables con sus actividades. Los listados se deben mostrar en QTableView
![Page 2: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/2.jpg)
2. La herramientas
Intérprete de Python: Versión 2.7.8
https://www.python.org/downloads/
![Page 3: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/3.jpg)
Diseñador de Ambiente gráfico para python 2.7
PYQT (Windows 32 bit installer)
http://www.riverbankcomputing.co.uk/software/pyqt/download
![Page 4: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/4.jpg)
IDE para python 2.7
PyScripter-v2.5.3 (32 bit)
https://code.google.com/p/pyscripter/downloads/list
MYSQL para python 2.7
http://dev.mysql.com/downloads/file.php?id=454383
![Page 5: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/5.jpg)
![Page 6: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/6.jpg)
3. Instalar Herramientas
Instalar Python 2.7
![Page 7: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/7.jpg)
Finalizar
Instalar PyQt4-4.11.3-gpl-Py2.7-Qt4.8.6-x32
![Page 8: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/8.jpg)
![Page 9: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/9.jpg)
![Page 10: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/10.jpg)
Finalizar
Instalar PyScripter-v2.5.3-Setup
![Page 11: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/11.jpg)
![Page 12: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/12.jpg)
![Page 13: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/13.jpg)
![Page 14: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/14.jpg)
![Page 15: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/15.jpg)
Finalizar
![Page 16: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/16.jpg)
Instalar Mysql para Python
![Page 17: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/17.jpg)
![Page 18: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/18.jpg)
![Page 19: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/19.jpg)
El motor de bases de datos seleccionado es MYSQL y utilizará la herramienta portable denominada
MOWES, que permite trabajar con la herramienta web PHPMYADMIN para crear y administrar la Base de
datos que se llamará BDPROYECTOS:
3.1 Ejecutar MOWES:
![Page 20: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/20.jpg)
![Page 21: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/21.jpg)
3.2 Abrir PHPMYADMIN en un Navegador WEB:
Se digita: http://localhost:81/phpmyadmin
Mowes Fue configurado para salir por el puerto 81
![Page 22: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/22.jpg)
![Page 23: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/23.jpg)
3.3 Crear la Base de Datos BDPROYECTOS
![Page 24: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/24.jpg)
![Page 25: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/25.jpg)
3.4 Crear la tabla RESPONSABLE:
![Page 26: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/26.jpg)
![Page 27: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/27.jpg)
Click en Grabar
![Page 28: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/28.jpg)
3.5 Crear la tabla PROYECTO
3.5.1 Click en el link BDPROYECTOS
3.5.2 Y se procede igual:
![Page 29: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/29.jpg)
![Page 30: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/30.jpg)
![Page 31: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/31.jpg)
![Page 32: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/32.jpg)
Igual para la tabla Actividad:
![Page 33: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/33.jpg)
Como la Clave Primaria de la tabla RESP_ACT_PROY está compuesta por CODRESP+CODACTIV+CODPROY,
Se procede un poco diferente:
3.6 Se crea la Tabla RESP_ACT_PROY sin Clave Primaria
![Page 34: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/34.jpg)
![Page 35: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/35.jpg)
3.7 Se crea la clave primaria compuesta con los tres campos
![Page 36: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/36.jpg)
![Page 37: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/37.jpg)
3.8 Crear las tres claves foráneas
3.8.1 Clave Foránea CODRESP
3.8.1.1 Se crea un índice para CODRESP
![Page 38: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/38.jpg)
![Page 39: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/39.jpg)
3.8.1.2 Click en el link Vista Relaciones
![Page 40: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/40.jpg)
![Page 41: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/41.jpg)
3.8.1.3 En la segunda columna del Item relaciones internas se selecciona la clave primaria en la tabla
RESPONSABLE (en la fila de la Clave Foránea CODRESP):
![Page 42: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/42.jpg)
Click en grabar
![Page 43: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/43.jpg)
Click en el link RESP_ACT_PROY, para crear las otras claves foráneas:
![Page 44: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/44.jpg)
![Page 45: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/45.jpg)
![Page 46: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/46.jpg)
![Page 47: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/47.jpg)
Click en vista Relaciones y se agregan las otras claves foráneas:
![Page 48: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/48.jpg)
Click en grabar
![Page 49: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/49.jpg)
Click en el link BDPROYECTOS para ver el diagrama:
![Page 50: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/50.jpg)
Click en Diseñador:
![Page 51: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/51.jpg)
![Page 52: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/52.jpg)
Click el ícono Pequeños/grandes todos, para ver el contenido de las tablas:
![Page 53: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/53.jpg)
Y Se reorganizan al gusto:
![Page 54: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/54.jpg)
Click en el link BDPROYECTOS para luego crear el script de la Base de Datos
![Page 55: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/55.jpg)
Click en exportar:
![Page 56: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/56.jpg)
Chequear la opción Enviar (genera un archivo descargable)
![Page 57: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/57.jpg)
Click en continuar
Se crear un archivo de texto llamado BDPROYECTOS.sql y se guarda en la carpeta configurada para
descargas
![Page 58: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/58.jpg)
![Page 59: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/59.jpg)
![Page 60: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/60.jpg)
4. Arquitectura del Software
4.1 Se crearán tres paquetes: modelo, vista y control
4.1.1 El Paquete modelo, contendrá una clase por cada tabla de la base de datos. Cada Clase un
atributo por cada campo de la tabla. Un método inicializador de atributos, un método get y un
método set por cada atributo.
4.1.2 El Paquete control, contendrá una clase por cada tabla, cada Clase un método inicializador de
objeto tipo modelo, un método insertar, un método consultar, un método modificar, un
método borrar y un método listar (CRUD - Create, Read, Update and Delete-)
4.1.3 El Paquete vista, contendrá una interfaz gráfica diseñada con PYQT4 para dar respuesta al
problema planteado.
5. Código
5.1 Se crea una carpeta llamada pryProyectos, con tres carpetas: modelo, vita y control:
5.2 desde PYSCRIPTER se crea un módulo llamado__init__.py dentro de cada carpeta para
relacionarlas como paquetes:
![Page 61: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/61.jpg)
![Page 62: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/62.jpg)
![Page 63: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/63.jpg)
![Page 64: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/64.jpg)
![Page 65: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/65.jpg)
![Page 66: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/66.jpg)
![Page 67: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/67.jpg)
![Page 68: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/68.jpg)
![Page 69: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/69.jpg)
![Page 70: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/70.jpg)
![Page 71: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/71.jpg)
![Page 72: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/72.jpg)
5.3 con PYQT4, se diseña la interfaz gráfica:
5.3.1 Diseño del Formulario frmMenuPricipal
5.3.1.1 Ejecutar designer que está en la carpeta C:\Python27\Lib\site-packages\PyQt4
![Page 73: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/73.jpg)
![Page 74: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/74.jpg)
5.3.1.2 Crear un Main Window
![Page 75: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/75.jpg)
![Page 76: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/76.jpg)
5.3.1.3 Guardar el archivo con el nombre de frmMenuPricipal.ui en la carpeta C:\Python27\Lib\site-
packages\PyQt4
![Page 77: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/77.jpg)
5.3.1.4 Crear el archivo frmMenuPrincipal.py utilizando el aplicativo que crea archivos .py a partir de
archivos.ui
5.3.1.5 Se ejecuta el cmd de DOS y se cambia a la carpeta C:\Python27\Lib\site-packages\PyQt4
![Page 78: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/78.jpg)
![Page 79: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/79.jpg)
![Page 80: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/80.jpg)
5.3.1.6 Se ejecuta el siguiente comando para obtener el archivo .py de Python
pyuic4 -x frmMenuPrincipal.ui -o frmMenuPrincipal.py
![Page 81: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/81.jpg)
![Page 82: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/82.jpg)
5.3.1.7 copiar el archivo frmMenuPrincipal.py en la carpeta vista del proyecto
![Page 83: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/83.jpg)
![Page 84: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/84.jpg)
5.3.1.8 Abrir y ejecutar el formulario en PYSCRIPTER
![Page 85: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/85.jpg)
![Page 86: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/86.jpg)
5.3.2 Se crean los Formularios tipo Widget, para Proyectos, Actividades, Responsables,
FrmResp_Act_Proy, Listados, Listado de Proyectos con sus actividades y Listados de
Responsables con sus actividades
![Page 87: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/87.jpg)
5.3.2.1 El Formulario para proyectos se llama FrmProyectos
![Page 88: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/88.jpg)
5.3.2.2 FrmProyectos contiene 6 etiquetas (Labels)(una de ellas para el título), 5 cuadros de texto
(Plain Text Edit) llamados txtCod, txtTit, txtFini,txtFfin y txtCos. 4 botones de comando (Push
Button) llamdos btnGuardar, btnConsultar, btnModificar y btnBorrar
Se guarda con el nombre de FrmProyectos
![Page 89: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/89.jpg)
5.3.2.3 FrmActividades contiene 5 etiquetas, 4 cuadros de texto y 4 botones de comando
5.3.2.4 FrmResponsables contiene 5 etiquetas, 4 cuadros de texto y 4 botones de comando
![Page 90: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/90.jpg)
5.3.2.5 FrmResp_Act_Proy contiene 5 etiquetas, 4 cuadros de texto , 4 botones de comando y 1 Table
View
5.3.2.6 Se crean los archivos FrmProyectos.py, FrmActividades.py, FrmResponsables.py,
FrmResp_Act_Proy.py con el comando
![Page 91: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/91.jpg)
pyuic4 archivo.ui -o archivo.py no es necesario la opción –x, ya que no se requiere de un ejecutable
interno. Estos formularios serán llamados externamente al darle click a las opciones del del menú qu
están el el formulario principal
pyuic4 FrmProyectos.ui -o FrmProyectos.py
pyuic4 FrmActividades.ui -o FrmActividades.py
pyuic4 FrmResponsables.ui -o FrmResponsables.py
pyuic4 FrmResp_Act_Proy.ui -o FrmResp_Act_Proy.py
5.3.2.7 Copiar los Archivos creados en la carpeta vista del proyecto y abrirlos con PYSCRIPTER
![Page 92: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/92.jpg)
6. Codificación
Los formularios Ui_FrmProyectos, Ui_FrmActividades, Ui_FrmResponsables y Ui_FrmResp_Act_Proy,
requieren acceder al método show (para ser mostrados desde el menú principal). El método show se
encuentra implementado en la clase QWidget del módulo QtGui. Ver http://qt-project.org/doc/qt-
4.8/qtgui.html . Por lo tanto se debe expresar la herencia de los formularios con QtGui. QWidget y no con
object como viene desde el diseñador PYQT4.
Adicionalmente se debe implementar el método __init__, en la clase de cada formulario para lograr el
efecto del llamado al método show():
def __init__(self):
QtGui.QWidget.__init__(self)
self.setupUi(self)
![Page 93: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/93.jpg)
![Page 94: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/94.jpg)
![Page 95: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/95.jpg)
En el formulario Principal se deben importar la clase de cada formulario:
En el Formulario principal se define la acción para cada menú de barra, y que no tiene submenú:
Como Listado de proyectos con sus actividades y Listado de Responsables con sus actividades, son
submenús, ya vienen adicionados desde el diseñador PYQT4.
![Page 96: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/96.jpg)
Al Formulario principal se le adiciona la acción a cada menú de la barra y que no tiene submenú:
A los Menús, que no tienen submenú, se cambia la propiedad setTitle por setText, y el nombre del menú,
por el nombre de la acción.
![Page 97: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/97.jpg)
Se invoca el método connect de la clase QObject del módulo QtCore, de tal manera que al darle click al
menú o submenú invoque los métodos asociados y que permiten mostrar cada formulario según sea el
caso:
Se programan los métodos para cada acción:
![Page 98: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/98.jpg)
Al ejecutar el Formulario principal queda:
![Page 99: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/99.jpg)
![Page 100: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/100.jpg)
![Page 101: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/101.jpg)
![Page 102: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/102.jpg)
6.1 Codificar las clases del paquete modelo
6.1.1 Ver http://elviajedelnavegante.blogspot.com/2010/10/las-propiedades-property-de-
python.html
6.1.2 Clase Proyecto
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
# Author: Carlos Arturo
#
# Created: 06/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
![Page 103: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/103.jpg)
#-------------------------------------------------------------------------------
class Proyecto(object):
def __init__(self, param_codigo, param_titulo, param_fechaIni,param_fechaFin,param_costo):
self.__codigo=param_codigo
self.__titulo=param_titulo
self.__fechaIni=param_fechaIni
self.__fechaFin=param_fechaFin
self.__costo=param_costo
def __getCodigo(self):
return self.__codigo
def __setCodigo(self, param_codigo = None):
self.__codigo = param_codigo
def __getTitulo(self):
return self.__titulo
def __setTitulo(self, param_titulo = None):
self.__titulo = param_titulo
def __getFechaIni(self):
return self.__fechaIni
def __setFechaIni(self, param_fechaIni = None):
self.__fechaIni = param_fechaIni
![Page 104: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/104.jpg)
def __getFechaFin(self):
return self.__fechaFin
def __setFechaFin(self, param_fechaFin = None):
self.__fechaFin = param_fechaFin
def __getCosto(self):
return self.__costo
def __setCosto(self, param_costo = None):
self.__costo = param_costo
codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')
titulo = property(fget = __getTitulo, fset = __setTitulo, doc = 'Título del proyecto')
fechaIni = property(fget = __getFechaIni, fset = __setFechaIni, doc = 'Fecha de Inicio del proyecto')
fechaFin = property(fget = __getFechaFin, fset = __setFechaFin, doc = 'Fecha de Finalización del
proyecto')
costo = property(fget = __getCosto, fset = __setCosto, doc = 'Costo')
6.1.3 Clase Actividad
![Page 105: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/105.jpg)
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
# Created: 08/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
![Page 106: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/106.jpg)
class Actividad(object):
def __init__(self, param_codigo, param_descripcion, param_fechaIni,param_fechaFin):
self.__codigo=param_codigo
self.__descripcion=param_descripcion
self.__fechaIni=param_fechaIni
self.__fechaFin=param_fechaFin
def __getCodigo(self):
return self.__codigo
def __setCodigo(self, param_codigo = None):
self.__codigo = param_codigo
def __getDescripcion(self):
return self.__descripcion
def __setDescripcion(self, param_descripcion = None):
self.__descripcion = param_descripcion
def __getFechaIni(self):
return self.__fechaIni
def __setFechaIni(self, param_fechaIni = None):
self.__fechaIni = param_fechaIni
def __getFechaFin(self):
return self.__fechaFin
![Page 107: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/107.jpg)
def __setFechaFin(self, param_fechaFin = None):
self.__fechaFin = param_fechaFin
codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')
descripcion = property(fget = __getDescripcion, fset = __setDescripcion, doc = 'Descripción de la
Actividad')
fechaIni = property(fget = __getFechaIni, fset = __setFechaIni, doc = 'Fecha de Inicio de la actividad')
fechaFin = property(fget = __getFechaFin, fset = __setFechaFin, doc = 'Fecha de Finalización de la
Actividad')
6.1.3 Clase Responsable
![Page 108: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/108.jpg)
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
# Created: 08/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
class Responsable(object):
def __init__(self, codigo, nombre, telFijo,telMovil):
self.__codigo=codigo
self.__nombre=nombre
self.__telFijo=telFijo
self.__telMovil=telMovil
def __getCodigo(self):
return self.__codigo
def __setCodigo(self, codigo = None):
self.__codigo = codigo
def __getNombre(self):
return self.__nombre
![Page 109: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/109.jpg)
def __setNombre(self, nombre = None):
self.__nombre = nombre
def __getTelFijo(self):
return self.__telFijo
def __setTelFijo(self, telFijo = None):
self.__telFijo = telFijo
def __getTelMovil(self):
return self.__telMovil
def __setTelMovil(self, telMovil = None):
self.__telMovil = telMovil
codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')
nombre = property(fget = __getNombre, fset = __setNombre, doc = 'Nombre')
telFijo = property(fget = __getTelFijo, fset = __setTelFijo, doc = 'Teléfono Fijo')
telMovil = property(fget = __getTelMovil, fset = __setTelMovil, doc = 'Teléfono Móvil')
6.1.4 Clase Resp_Act_Proy
![Page 110: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/110.jpg)
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
# Created: 08/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
![Page 111: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/111.jpg)
class Resp_Act_Proy(object):
def __init__(self, codResp, codActiv, codProy,fecha_Asig):
self.__codResp=codResp
self.__codActiv=codActiv
self.__codProy=codProy
self.__fecha_Asig=fecha_Asig
def __getCodResp(self):
return self.__codResp
def __setCodResp(self, codResp = None):
self.__codResp = codResp
def __getCodActiv(self):
return self.__codActiv
def __setCodActiv(self, codActiv = None):
self.__codActiv = codActiv
def __getCodProy(self):
return self.__codProy
def __setCodProy(self, codProy = None):
self.__codProy = codProy
def __getFecha_Asig(self):
return self.__fecha_Asig
![Page 112: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/112.jpg)
def __setFecha_Asig(self, fecha_Asig = None):
self.__fecha_Asig = fecha_Asig
codResp = property(fget = __getCodResp, fset = __setCodResp, doc = 'Código Responsable')
codActiv = property(fget = __getCodActiv, fset = __setCodActiv, doc = 'Código Actividad')
codProy = property(fget = __getCodProy, fset = __setCodProy, doc = 'Código Proyecto')
fecha_Asig = property(fget = __getFecha_Asig, fset = __setFecha_Asig, doc = 'Fecha Asignación de la
Actividad')
6.2 Codificar las clases del paquete control
6.2.1 Clase ConexionMySQL
# -*- coding: utf-8 -*-
#!/usr/bin/python
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
# Created: 06/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
import MySQLdb
![Page 113: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/113.jpg)
class ConexionMySQL(object):
mensaje="ok"
conexion=None
cursor=None
lista=None
def __init__(self):
pass
def getLista(self):
return self.lista
def abrirBd(self,usuario,contrasena,baseDeDatos):
mensaje="ok"
try:
self.conexion = MySQLdb.Connect(host="127.0.0.1", port=3306, user=usuario,
passwd=contrasena, db=baseDeDatos)
self.cursor = self.conexion.cursor()
except MySQLdb.Error,msgError:
self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError
except AttributeError as objAttributeError:
self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]
return self.mensaje
def cerrarBd(self):
mensaje="ok"
try:
self.cursor.close()
self.conexion.close()
![Page 114: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/114.jpg)
except MySQLdb.Error,msgError:
self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError
except AttributeError as objAttributeError:
self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]
return self.mensaje
def ejecutarComandoSql(self,comandoSql):
mensaje="ok"
try:
self.cursor.execute(comandoSql)
self.lista = list(self.cursor)
self.conexion.commit()
except MySQLdb.Error,msgError:
self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError
except AttributeError as objAttributeError:
self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]
return self.mensaje
6.2.2 Clase CtrProyecto
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
![Page 115: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/115.jpg)
# Created: 04/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
from modelo.Proyecto import *
from control.ConexionMySQL import *
from control.CtrProyecto import *
def main():
pass
if __name__ == '__main__':
main()
class CtrProyecto(object):
mensaje='ok'
objProyecto=None
lista=None
def __init__(self,Proyecto):
self.objProyecto=Proyecto
def getLista(self):
return self.lista
def getObjProyecto(self):
return self.objProyecto
def guardar(self):
![Page 116: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/116.jpg)
codigo=self.objProyecto.codigo
titulo=self.objProyecto.titulo
fechaIni=self.objProyecto.fechaIni
fechaFin=self.objProyecto.fechaFin
costo=self.objProyecto.costo
comandoSql="INSERT INTO PROYECTO
VALUES('"+codigo+"','"+titulo+"','"+fechaIni+"','"+fechaFin+"',"+str(costo)+")"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def modificar(self):
codigo=self.objProyecto.codigo
titulo=self.objProyecto.titulo
fechaIni=self.objProyecto.fechaIni
fechaFin=self.objProyecto.fechaFin
costo=self.objProyecto.costo
comandoSql="UPDATE PROYECTO SET TITULO='"+
titulo+"',FECHAINI='"+fechaIni+"',FECHAFIN='"+fechaFin+"',COSTO="+str(costo)+" WHERE
CODIGO='"+codigo+"'"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
![Page 117: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/117.jpg)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def borrar(self):
codigo=self.objProyecto.codigo
comandoSql="DELETE FROM PROYECTO WHERE CODIGO='"+codigo+"'"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def consultar(self):
codigo=self.objProyecto.codigo
comandoSql="SELECT * FROM PROYECTO WHERE CODIGO='"+codigo+"'"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
self.objProyecto.titulo= self.lista[0][1]
self.objProyecto.fechaIni= self.lista[0][2]
![Page 118: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/118.jpg)
self.objProyecto.fechaFin= self.lista[0][3]
self.objProyecto.costo= self.lista[0][4]
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def listar(self):
codigo=self.objProyecto.codigo
comandoSql="SELECT * FROM PROYECTO"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
6.2.3 Clase CtrActividad
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
#
![Page 119: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/119.jpg)
# Created: 04/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
from modelo.Actividad import *
from control.ConexionMySQL import *
from control.CtrActividad import *
def main():
pass
if __name__ == '__main__':
main()
class CtrActividad(object):
mensaje='ok'
objActividad=None
lista=None
def __init__(self,Actividad):
self.objActividad=Actividad
def getLista(self):
return self.lista
def getObjActividad(self):
return self.objActividad
def guardar(self):
![Page 120: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/120.jpg)
codigo=self.objActividad.codigo
descripcion=self.objActividad.descripcion
fechaIni=self.objActividad.fechaIni
fechaFin=self.objActividad.fechaFin
comandoSql="INSERT INTO ACTIVIDAD
VALUES("+codigo+",'"+descripcion+"','"+fechaIni+"','"+fechaFin+"')"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def modificar(self):
codigo=self.objActividad.codigo
descripcion=self.objActividad.descripcion
fechaIni=self.objActividad.fechaIni
fechaFin=self.objActividad.fechaFin
comandoSql="UPDATE ACTIVIDAD SET
DESCRIPCION='"+descripcion+"',FECHAINI='"+fechaIni+"',FECHAFIN='"+fechaFin+"' WHERE
CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
![Page 121: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/121.jpg)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def borrar(self):
codigo=self.objActividad.codigo
comandoSql="DELETE FROM ACTIVIDAD WHERE CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def consultar(self):
codigo=self.objActividad.codigo
comandoSql="SELECT * FROM ACTIVIDAD WHERE CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
self.objActividad.descripcion= self.lista[0][1]
self.objActividad.fechaIni= self.lista[0][2]
![Page 122: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/122.jpg)
self.objActividad.fechaFin= self.lista[0][3]
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def listar(self):
codigo=self.objActividad.codigo
comandoSql="SELECT * FROM ACTIVIDAD"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
6.2.4 Clase CtrResponsable
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
![Page 123: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/123.jpg)
#
# Created: 04/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
from modelo.Responsable import *
from control.ConexionMySQL import *
from control.CtrResponsable import *
def main():
pass
if __name__ == '__main__':
main()
class CtrResponsable(object):
mensaje='ok'
objResponsable=None
lista=None
def __init__(self,Responsable):
self.objResponsable=Responsable
def getLista(self):
return self.lista
def getObjResponsable(self):
return self.objResponsable
![Page 124: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/124.jpg)
def guardar(self):
codigo=self.objResponsable.codigo
nombre=self.objResponsable.nombre
telFijo=self.objResponsable.telFijo
telMovil=self.objResponsable.telMovil
comandoSql="INSERT INTO RESPONSABLE
VALUES("+codigo+",'"+nombre+"','"+telFijo+"','"+telMovil+"')"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def modificar(self):
codigo=self.objResponsable.codigo
nombre=self.objResponsable.nombre
telFijo=self.objResponsable.telFijo
telMovil=self.objResponsable.telMovil
comandoSql="UPDATE RESPONSABLE SET
nombre='"+nombre+"',TELFIJO='"+telFijo+"',TELMOVIL='"+telMovil+" WHERE CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
![Page 125: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/125.jpg)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def borrar(self):
codigo=self.objResponsable.codigo
comandoSql="DELETE FROM RESPONSABLE WHERE CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def consultar(self):
codigo=self.objResponsable.codigo
comandoSql="SELECT * FROM RESPONSABLE WHERE CODIGO="+codigo
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
self.objResponsable.nombre= self.lista[0][1]
self.objResponsable.telFijo= self.lista[0][2]
![Page 126: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/126.jpg)
self.objResponsable.telMovil= self.lista[0][3]
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def listar(self):
codigo=self.objResponsable.codigo
comandoSql="SELECT * FROM RESPONSABLE"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
6.2.5 Clase CtrResp_Act_Proy
# -*- coding: utf-8 -*-
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Carlos Arturo
![Page 127: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/127.jpg)
#
# Created: 04/12/2014
# Copyright: (c) Carlos Arturo 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
from modelo.Resp_Act_Proy import *
from control.ConexionMySQL import *
from control.CtrResp_Act_Proy import *
def main():
pass
if __name__ == '__main__':
main()
class CtrResp_Act_Proy(object):
mensaje='ok'
objResp_Act_Proy=None
lista=None
def __init__(self,Resp_Act_Proy):
self.objResp_Act_Proy=Resp_Act_Proy
def getLista(self):
return self.lista
def getObjResp_Act_Proy(self):
return self.objResp_Act_Proy
![Page 128: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/128.jpg)
def guardar(self):
codResp=self.objResp_Act_Proy.codResp
codActiv=self.objResp_Act_Proy.codActiv
codProy=self.objResp_Act_Proy.codProy
fecha_Asig=self.objResp_Act_Proy.fecha_Asig
comandoSql="INSERT INTO Resp_Act_Proy
VALUES('"+codResp+"',"+codActiv+","+codProy+",'"+fecha_Asig+"')"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def modificar(self):
codResp=self.objResp_Act_Proy.codResp
codActiv=self.objResp_Act_Proy.codActiv
codProy=self.objResp_Act_Proy.codProy
fecha_Asig=self.objResp_Act_Proy.fecha_Asig
comandoSql="UPDATE Resp_Act_Proy SET codResp='"+codResp+"',
codActiv="+codActiv+",codProy="+codProy+",fecha_Asig='"+fecha_Asig+"' WHERE
codResp='"+codResp+"' AND codActiv="+codActiv+" AND codProy="+codProy
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
![Page 129: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/129.jpg)
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def borrar(self):
codResp=self.objResp_Act_Proy.codResp
comandoSql="DELETE FROM Resp_Act_Proy WHERE codResp='"+codResp+"' AND
codActiv="+codActiv+" AND codProy="+codProy
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def consultar(self):
codResp=self.objResp_Act_Proy.codResp
codActiv=self.objResp_Act_Proy.codActiv
codProy=self.objResp_Act_Proy.codProy
comandoSql="SELECT * FROM Resp_Act_Proy WHERE codResp='"+codResp+"' AND
codActiv="+codActiv+" AND codProy="+codProy
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
![Page 130: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/130.jpg)
self.lista=objConexionMySQL.getLista()
self.objResp_Act_Proy.fecha_Asig= self.lista[0][3]
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
def listar(self):
codResp=self.objResp_Act_Proy.codResp
comandoSql="SELECT * FROM Resp_Act_Proy"
objConexionMySQL=ConexionMySQL()
self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")
if self.mensaje=='ok':
self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)
self.lista=objConexionMySQL.getLista()
if self.mensaje=='ok':
self.mensaje= objConexionMySQL.cerrarBd()
return self.mensaje
6.3 Terminar de codificar las clases del paquete vista
6.3.1 Clase Ui_FrmProyectos
Evento Click asociado a los botones btnGuardar, btnConsultar, btnModificar y btnBorrar
![Page 131: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/131.jpg)
![Page 132: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/132.jpg)
![Page 133: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/133.jpg)
6.3.2 Clase Ui_FrmActividades
![Page 134: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/134.jpg)
![Page 135: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/135.jpg)
![Page 136: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/136.jpg)
6.3.3 Clase Ui_FrmResponsables
![Page 137: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/137.jpg)
![Page 138: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/138.jpg)
![Page 139: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/139.jpg)
6.3.4 Clase Ui_FrmResp_Act_Proy
![Page 140: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/140.jpg)
![Page 141: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/141.jpg)
![Page 142: Fundamentos de python con orientación a objetos y basado en problemas con bases de datos](https://reader033.fdocument.pub/reader033/viewer/2022052606/589ed6251a28ab39498b4cb3/html5/thumbnails/142.jpg)