Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de Phyton
Manual de Phyton
Computadoras
PROGRAMACIÓN DE COMPUTADORAS 2
Índice
Presentación 5
Red de contenidos 7
Unidad de Aprendizaje 1
ESTRUCTURA DE PROGRAMACIÓN 9
1.1 Tema 1 : Estructura de programación 11
1.1.1 : Introducción a la programación 11
1.1.2 : Estructura de control secuencial 20
1.1.3 : Estructura de control secuencial 21
1.1.4 : Estructura de control repetitivas 24
Unidad de Aprendizaje 2
ARREGLOS 41
2.1 Tema 3 : Arreglos 43
2.1.1 : Arreglos unidimensionales o vectores 43
2.1.2 : Arreglos bidimensionales o matrices 43
Unidad de Aprendizaje 3
ALGORITMOS DE CONTROL 81
3.1 Tema 5 : Desarrollo de algoritmos de control 72
3.1.1 : Introducción a los Subalgoritmos 73
3.1.2 : Funciones 73
3.1.3 : Procedimientos
Unidad de Aprendizaje 4
MANEJO DE PUERTOS
4.1 Tema 7 : Manejo de puertos 89
4.1.1 : Comunicación a tráves de puertos. 89
4.1.2 : Diseño del software en computadora para captura de datos a 82
través del puerto serial (RS232 y USB).
4.1.3 : Diseño del software en computadora para envío de datos a 95
través del puerto serial (RS232 y USB).
4.1.4 : Diseño del software para microcontroladores. 95
4.1.5 : Diseño del hardware; circuito de comunicación y potencia.
Unidad de Aprendizaje 5
ADQUISICION DE DATOS Y APLICACIONES
5.1 Tema 8 : Interfaz gráfico con Python 97
5.1.1 : Creación de ventanas 97
5.1.2 : Manejo de eventos 98
5.1.3 : Manejo de archivos 98
5.1.4 : Introducción a los Sockets TCP/IP 99
5.1.5 : Uso de sockets para comunicación TCP/IP, cliente/servidor 103
5.1.6 : Aplicación de un sistema de adquisición de datos usando 107
interfaz gráfica, sensores, comunicación TCP/IP,
microcontrolador (Arduino) y circuitos de potencia
Presentación
La tecnología actual involucra el uso de software, desde la aplicación en el control de
electrodomésticos, juguetes electrónicos, videojuegos, comunicaciones y aplicaciones
enproyectos de ingeniería, estudio e investigación de diversos temas de la ciencia.
Bajo este campo de aplicación, se hace prescindible conocer la programación a nivel
técnico y de ingeniería.
Es necesario conocer los algoritmos y los lenguajes de programación que puedan ser
de utilidad y nos permita aplicarlos según el área de estudio de interes.
Red de contenidos
Programación II
UNIDAD
1
ESTRUCTURA DE
PROGRAMACIÓN
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el estudiante implementa programas utilizando las
diferentes estructuras de control y maneja las entradas y salidas de datos en
Python.
TEMARIO
1.1 Tema 1 : Estructuras de programación
1.1.1 : Introducción a la programación
1.1.2 : Estructura de control secuencial
1.1.3 : Estructura de control selectivas
1.1.4 : Estructura de control repetitivas
ACTIVIDADES PROPUESTAS
Los programas de Python son portátiles, es decir, pueden ser portados a otros
sistemas operativos como Windows, Linux, Unix y Mac OS X, y se pueden ejecutar en
Java y .NET (máquinas virtuales).
Para invocar o iniciar Python, solo enrutar como muestra el siguiente diagrama:
Tipos de datos
Python tiene cinco tipos de datos
Numbers (números)
String (cadena de caracteres)
List (lista)
Tuple (tupla)
Dictionary (Diccionario)
La figura 5 muestra ejemplos de tipo de datos numéricos, entre ellos, numero entero,
numero de punto flotante y numero entero largo.
A todo comentario de una sola línea se antepone el símbolo de # y cuando es
multilinea se empieza y termina el comentario con tres veces el siguiente símbolo “.
La función “type” muestra el tipo de dato declarado.
Python reconoce las variables de tipo complejos y utiliza el imaginario “j”. Puede
solicitarse la parte real, imaginaria y el módulo de un número complejo.
Una cadena de caracteres es del tipo “String” yla figura 8 muestra el ejemplo
respectivo.
La función “len” indica el número de caracteres correspondiente a la cadena.
Los caracteres ocupan la posicion desde cero y en forma creciente de izquierda a
derecha.
Puede también tomarse la posición de derecha a izquierda, en este caso, varia desde
el valor de -1 y en forma decreciente.
Una lista (list) básicamente es un array, cuyos componentes están separados por
comas y están encerrados por corchetes. Los componentes pueden cambiarse o
modificarse.
Una tupla (tuple) tambien es un array, cuyos componentes están separados por comas
y están encerrados por parentesis. Los componentes no pueden cambiarse o
modificarse. El ejemplo de la figura muestra el ejemplo respectivo y se aprecia el
mensaje de error al intentar modificarse un componente de la tupla.
Operadores Matemáticos
Suma (+)
Resta (-)
Negación
Multiplicación (*)
Exponente (**)
División (/)
División entera (//)
Módulo (%)
Operadores de Comparación
Operadores de asignación
Operadores lógicos
.
Figura 15: Ejemplo de operadores lógicos
Fuente.- Elaboración propia
Operadores especiales
INICIO
ACCION 1
ACCION 2
ACCION N
FIN
- Declaración de variables
- Asignación de variables
- Captura de ingreso de datos
- Procesamiento
- Resultados
El pseudocódigo es:
Si<condición> Entonces
<Acción >
Fin_si
Si
Condición F
Acción
Si <condición> entonces
<Acción1>
Sino
<Acción 2>
Fin_Si
Si
Condición
V F
Acción 1 Acción 2
La estructura de control selectiva múltiple evalúa una expresión que podrá tomar n
valores distintos, y según el valor se ejecuta solo una acción respectiva.En el diagrama
de flujo del algoritmo; seguirá solo un determinado camino entre las n posibilidades.
Esta estructura se representa por un selector el cual si toma el valor 1 ejecutará la
acción 1, si toma el valor 2 ejecutara la acción 2, si toma el valor n realizara la acción
n.
Su sintaxis es la siguiente:
Condición
Mientras No
Condición
Si
Acciones
Se ejecuta un grupo de acciones cada vez que el valor de la variable es iterado dentro
de un rango, cabe resaltar que este rango es pecificado, desde la variable de inicio,
final y ocasionalmente el incremento o decremento. No necesariamente la variable
empieza encero. En Python se puede iterar en progresiones aritméticas, en elementos
de una secuencia, una lista o cadena, en el orden en que estos aparecen en la misma.
No
Esta dentro
deun rango
VlCondición
Si
Acciones
Incremento
La función range:
Sentencia Break
El uso más común de ruptura es cuando alguna condición externa se activa requiere
una salida precipitada de una condicional o un bucle.
Sentencia Continue
Sentencia pass
Resumen
1. Python es un lenguaje de programación interpretado y no necesita compilarse.
2. Python es multiplataforma.
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o https://www.youtube.com/watch?v=fYW2U-rEoZ4
o https://www.youtube.com/watch?v=fPFsMntZgTs
o https://www.youtube.com/watch?v=kpbUtBAu7O0
o https://www.youtube.com/watch?v=MC-NUAO1dQM
o https://www.youtube.com/watch?v=TSW5bHV_K1U
Función print()
La función print imprime en pantalla una cadena de caracteres de tipo string (str) y/o
numéricos. Las cadenas de caracteres estarán encerradas por un apostrofe (‘) o
comillas (“).
Carácter Significado
d, i Entero en decimal
0 Entero en octal
x, X Entero en hexadecimal
e, E Numero en coma flotante con exponente
f, F Numero en coma flotante sin exponente
Numero en coma flotante con o sin exponente,
g, G
según la precisión y la talla del exponente
s Transforma el objeto en cadena usando str.
Figura 32: Caracteres de formato para el operador % de cadenas
Fuente.- Elaboración propia
Secuencia Significado
Cabe resaltar que se debe colocar obligatoriamente en la parte superior del programa
un código para que pueda reconocer todo tipo de caracteres como la tilde, letra “ñ”, “¡”,
etc. El código recomendado es # -*- coding: cp1252 -*-..
Figura 37: Ejemplo de programa que genera 5 numeros enteros aleatorioa y analiza si es par o impar
Fuente.- Elaboración propia
El siguiente ejemplo se aprecia que la función raw_input puede capturar variables del
tipo string, es decir, números, letras, etc.
Para que la función input pueda trabajar correctamente en este ejemplo, se debe
colocar la clave encerrada con comilla simple, es decir, enfatizando que es del tipo
string.
EJEMPLO 1
En Python
EJEMPLO 2
En Python
EJEMPLO 3
Figura 46: Programa calcula las raíces de una ecuación de segundo grado
Fuente.- Elaboración propia
Resumen
1. La función de impresión en pantalla es print, pudiendo tener los tres formatos
print’cadena de caracteres’
print “cadena de caracteres” o
print (“cadena de caracteres”).
Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o https://www.youtube.com/watch?v=5Gqn2lPPKxQ
o http://www.mclibre.org/consultar/python/lecciones/python_while.html
o http://www.cyberciti.biz/faq/python-raw_input-examples/
UNIDAD
2
ARREGLOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el estudiante implementa programas en donde se
puede apreciar el uso de arreglos unidimensionales y bidimensionales para la
solución de problemas aplicativos a las áreas industrial y/o de electrónica.
TEMARIO
2.1 Tema 3 : Arreglos
2.1.1 : Arreglos unidimensionales o vectores
2.1.2 : Arreglos bidimensionales o matrices
ACTIVIDADES PROPUESTAS
2.1. ARREGLOS
2.1.1. Arreglos unidimensionales o vectores
Una lista en Python es sólo una colección ordenada de elementos que pueden ser de
cualquier tipo. En comparación una matriz es una colección ordenada de artículos de
un solo tipo, por lo que, en principio, una lista es más flexible que un array, pero es
esta flexibilidad que hace un poco más difícil las cosas cuando se quiere trabajar con
una estructura regular. Una lista es también un tipo mutable dinámico y esto significa
que puede añadir y eliminar elementos de la lista en cualquier momento.
Para definir una lista, se escribe una lista separada por comas de elementos entre
corchetes:
Resumen
1. Gracias a la librería Numpy para Python podemos utilizar comando para el fácil
manejo de array.
2. Adicionalmente la librería Scipy que trabaja con Numpy y Python contribuye para el
cálculo de determinantes y soluciones de sistema de ecuaciones lineales.
Aplicando matrices y utlizando el comando linalg.solve(a,b) se puede encontrar el
resultado.
3. Pueden revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o https://www.youtube.com/watch?v=nQQcdFJ7Gqg
o https://www.youtube.com/watch?v=zCliTI7gsnc
o https://www.youtube.com/watch?v=XKDSwibZfYA
o http://progra.usm.cl/apunte/materia/sistemas-ecuaciones.html
Programa:
Resultado:
Programa:
Resultado:
Resumen
1. Las librerías Numpy y Scipy para Python ofrecer muchas ventajas para el manejo
de matrices, gracias a ellas podemos aplicarlalas para la solución de circuitos
eléctricos.
3. Se puede revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o https://www.youtube.com/watch?v=nQQcdFJ7Gqg
o https://www.youtube.com/watch?v=zCliTI7gsnc
o https://www.youtube.com/watch?v=XKDSwibZfYA
o http://progra.usm.cl/apunte/materia/sistemas-ecuaciones.html
UNIDAD
3
ALGORITMOS DE CONTROL
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el estudiante implementa subalgoritmos que permiten la
simplificación de tareas repetitivas dentro de un programa.
TEMARIO
ACTIVIDADES PROPUESTAS
3.1.2. Funciones
Caberesaltar que existen funciones ya definidas como son las funciones matemáticas.
3.1.3. Procedimientos
Un parámetro es un valor que la función espera recibir cuando sea llamada (invocada),
a fin de ejecutar acciones en base al mismo. Una función puede esperar uno o más
parámetros (que irán separados por una coma) o ninguno.
Los parámetros, se indican entre los paréntesis, a modo de variables, a fin de poder
utilizarlos como tales, dentro de la misma función.
Los parámetros que una función espera, serán utilizados por ésta, dentro de su
algoritmo, a modo de variables de ámbito local. Es decir, que los parámetros serán
variables locales, a las cuáles solo la función podrá acceder:
Se puede asignar valores por defecto a los parámetros de las funciones. Esto significa,
que la función podrá ser llamada con menos argumentos de los que espera:
Es posible llamar a una función, pasándole los argumentos esperados, como pares
de claves=valor:
Puede ser que una función, espere recibir un número arbitrario desconocido de
argumentos. Estos argumentos, llegarán a la función en forma de tupla.
Es posible llamar a una función dentro de otra, de forma fija y de la misma manera que
se la llamaría, desde fuera de dicha función:
def funcion():
return "Hello World"
Sin embargo, es posible que se desee realizar dicha llamada, de manera dinámica,
es decir, desconociendo el nombre de la función a la que se deseará llamar. A este
tipo de acciones, se las denomina llamadas de retorno.
Para conseguir llamar a una función de manera dinámica, Python dispone de dos
funciones nativas:locals() y globals().
def funcion():
return "Hello World"
def llamada_de_retorno(func=""):
"""Llamada de retorno a nivel global"""
return globals()[func]()
print llamada_de_retorno("funcion")
def funcion(nombre):
return "Hello " + nombre
def llamada_de_retorno(func=""):
"""Llamada de retorno a nivel global"""
return globals()[func]("Pedro")
print llamada_de_retorno("funcion")
if nombre_de_la_funcion in locals():
if callable(locals()[nombre_de_la_funcion]):
print locals()[nombre_de_la_funcion]("Clarisa")
def funcion(nombre):
return "Hello " + nombre
def llamada_de_retorno(func=""):
if func in globals():
if callable(globals()[func]):
return globals()[func]("Lois")
else:
return "Función no encontrada"
print llamada_de_retorno("funcion")
nombre_de_la_funcion = "funcion"
if nombre_de_la_funcion in locals():
if callable(locals()[nombre_de_la_funcion]):
print locals()[nombre_de_la_funcion]("Fiorella")
else:
print "Función no encontrada"
Resumen
1. La librería de funciones matemáticas contribuyen a agilizar la programación.
2. Una función permite reutilizar parte de la programación tantas veces como sea
necesaria.
3. Una función también permite evaluar un algoritmo según las variables locales
definidas.
4. Se puede revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o http://librosweb.es/libro/python/capitulo_4/definiendo_funciones.html
o https://www.youtube.com/watch?v=_C7Uj7O5o_Q
o https://www.youtube.com/watch?v=_fiY9P-lPEc
DESARROLLO DE APLICACIONES
https://bioinf.comav.upv.es/courses/linux/python/funciones.html
Ejercicios
print(calcular_area_triangulo(4, 5, 3))
calcular_area_triangulo(1, 2, 3)
def factorial(numero):
acumulado = 1
for indice in range(1, numero + 1):
acumulado = indice
return acumulado
print(factorial(10))
6. Escribe una función que cuente las palabras dada una lista de frases.
albumina
inmunoglobulina
antitripsina
lipoproteina
transferrina
inmunoglobulina
antitripsina
protombina
def transformar_formato(genotipo):
return formato arreglado
def cambiar_formato_genotipo(fichero):
for linea in fichero:
Si primera linea:
imprimir
else:
marcador, genotipo = linea.split
genotipo = transformar_formato(genotipo)
imprimir marcador y genotipo
cambiar_formato_genotipo(fichero)
Soluciones
1. Corrige el siguiente programa para calcular el área de un triángulo.
print(calcular_area_triangulo(4, 5, 3))
print(calcular_area_triangulo(1, 2, 3))
::
def calcular_area_triangulo(base, altura):
area = base * altura / 2.0 return area
def factorial(numero):
acumulado = 1
for indice in range(1, numero + 1):
acumulado *= indice
return acumulado
print(factorial(10))
def suma_lista(lista):
acumulado = 0
for numero in lista:
acumulado += numero
return acumulado
print(suma_lista([1, 2, 3, 4]))
5. Corrige el siguiente programa que busca palabras comunes entre dos frases.
6. Escribe una función que cuente las palabras dada una lista de frases.
def contar_palabras(lista_frases):
contador = {}
for frase in lista_frases:
palabras = frase.strip().split()
for palabra in palabras:
if palabra not in contador:
contador[palabra] = 0
contador[palabra] += 1
return contador
albumina
inmunoglobulina
antitripsina
lipoproteina
transferrina
inmunoglobulina
antitripsina
protombina
def leer_proteinas(nombre_fichero):
'Leer las palabras de un fichero y las devuelve en un set'
proteinas = set()
for linea in open(nombre_fichero'):
proteina = linea.strip()
proteinas.add(proteina)
return proteinas
if __name__ == '__main__':
comparar_proteinas('proteinas1.txt', 'proteinas2.txt')
#!/usr/bin/env python
# Dado un fichero de texto como entrada busca una lista de
# patrones de texto e imprime las lineas coincidentes
if __name__ == '__main__':
nombre_fichero = 'prueba.txt'
patrones = ['texto1', 'texto2']
imprimir_lineas_coincidentes(nombre_fichero, patrones)
def calcular_media(valores):
'''Dada una lista de valores devuelve la media.
def calcular_medias(fichero):
'Calcula las medias para los triplicados de un microarray'
items = linea.split()
nombre_gen = items[0]
valores1 = items[1:4]
valores2 = items[4:7]
print valores1
print valores2
media1 = calcular_media(valores1)
media2 = calcular_media(valores2)
if __name__ == '__main__':
calcular_medias('microarray.txt')
def transformar_formato(genotipo):
return formato arreglado
def cambiar_formato_genotipo(fichero):
for linea in fichero:
Si primera linea:
imprimir
else:
marcador, genotipo = linea.split
genotipo = transformar_formato(genotipo)
imprimir marcador y genotipo
cambiar_formato_genotipo(fichero)
def transformar_genotipo(linea_genotipo):
'''Transforma una linea de genotipo
desde:
snp1 GG CC GC GG GC CC
a:
snp1 A H B
'''
genotipo_padre = genotipos_separados.pop(0)
# ['CC ', 'GC ', 'GG ', 'GC ', 'CC ']
genotipo_madre = genotipos_separados.pop(0)
# ['GC ', 'GG ', 'GC ', 'CC ']
genotipo_hib = genotipos_separados.pop(0)
# ['GG ', 'GC ', 'CC ']
genotipo = 'H'
else:
print 'Ha habido un fallo, genotipo desconocido', genotipo
genotipos_transformados.append(genotipo)
return linea
def cambiar_formato_genotipos(fichero):
'''Transforma un fichero de genotipado a otro formato.
Y el de salida:
if __name__ == '__main__':
cambiar_formato_genotipos('genotipos.txt')
Resumen
1. Las funciones presentan una facilidad para realizar diversos tipos de aplicaciones
en Python, dependerá del programador aprovecharlo y enfocarlo a la necesidad
del programa aplicativo.
2. Se puede revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o http://librosweb.es/libro/python/capitulo_4/definiendo_funciones.html
o https://www.youtube.com/watch?v=_C7Uj7O5o_Q
o https://www.youtube.com/watch?v=_fiY9P-lPEc
UNIDAD
4
MANEJO DE PUERTOS
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el estudiante conocerá la configuración del puerto de
comunicaciones y los comandos para el envio y recepción a través del puerto de
transmisión serial de datos. Programa la interfaz de comunicación
microcontroladores (Arduino). Selecciona adecuadamente la interfaz de potencia a
utilizar.
TEMARIO
ACTIVIDADES PROPUESTAS
La comunicación serial es un protocolo muy común (no hay que confundirlo con
el Bus Serial de Comunicación, o USB) para comunicación entre dispositivos
que se incluye de manera estándar en prácticamente cualquier computadora.
La mayoría de las computadoras incluyen dos puertos seriales RS-232. La
comunicación serial es también un protocolo común utilizado por varios
dispositivos para instrumentación; existen varios dispositivos compatibles con
GPIB que incluyen un puerto RS-232. Además, la comunicación serial puede
ser utilizada para adquisición de datos si se usa en conjunto con un dispositivo
remoto de muestreo.
2. ¿Qué es RS-232?
--------------
\12345/
\6789/
---------
Handshake: RTS (pin 7), CTS (pin 8), DSR (pin 6), DCD (pin 1), DTR (pin 4)
Otros: RI (pin 9)
3. ¿Qué es RS-422?
4. ¿Qué es RS-485?
-------------
\12345/
\6789/
---------
Datos: TXD+ (pin 8), TXD- (pin 9), RXD+ (pin 4), RXD- (pin 5)
Handshake: RTS+ (pin 3), RTS- (pin 7), CTS+ (pin 2), CTS- (pin 6)
Un programa
Resumen
1. Con la librería Pyserial en Python, el manejo de entrada y salida de datos por el
puerto USB se realiza de manera sencilla, trabajando con la placa de Arduino.
3. Arduino, Python y Pyserial son las tres herramientas en software a utilizar para
el manejo del puerto USB, cabe resaltar, que los tres son desacargados
libremente sin costo alguno.
4. Se puede revisar los siguientes enlaces para ampliar los conceptos vistos en
esta unidad:
o https://misterelectronico.wordpress.com/2015/05/02/programacion-del-
puerto-serie-con-python/
o http://panamahitek.com/python-arduino-comunicacion-serial/
o http://polaridad.es/configuracion-comunicaciones-serie-python-arduino/
o http://robologs.net/2014/07/27/tutorial-de-arduino-y-python/
o https://www.youtube.com/watch?v=IS1ovQOS1Ao
UNIDAD
5
ADQUISICION DE DATOS Y
APLICACIONES
LOGRO DE LA UNIDAD DE APRENDIZAJE
Al término de la unidad, el estudiante adquiere los conocimientos para el manejo de
Interfaz gráfico de Python, maneja diversos tipos de archivos (texto, imagen).
Diseña interfaz gráfica para el manejo de datos por el puerto USB. Realiza
comunicación TCP/IP, cliente/servidor e implementa un sistema de adqusición de
datos.
TEMARIO
Características comunes
Ventajas y Desventajas
Tkinter
Ventajas:
Desventajas:
Nota **: cabe aclarar que las ultimas versiones de TCL/TK mejoran varios de estos
puntos, dibujando con las funciones nativas de la plataforma, lo que acelera y mejora
la apariencia.
WxPython
Ventajas:
Desventajas:
PyQt
Ventajas:
Desventajas:
PyGTK
Ventajas:
o Completo conjunto de elementos gráficos (listados, arboles,
grillas, etc.)
o Flexible y potente control del comportamiento de la interface
o Enlace con PyOrbit para programar aplicaciones en GNOME
o Es estable, y los mensajes de error son correctos.
o
Desventajas:
o No viene preinstalado con python, se debe instalar por separado
o Relativamente mas complejo de aprender
o Relativamente lento en Windows (dibuja cada botón, etiqueta,
menú, etc.) lo que le da una Apariecia "extraña" (aunque es parecido a
windows)
o En windows, es la librería que tiene mas dependencias y se
instalan por separado.
o Aparentemente tiene la documentación mas precaria de todos
Según la fuente:
http://progra.usm.cl/apunte/materia/interfaces-graficas.html
Tenemos:
Todo programa necesita contar con algún mecanismo para recibir la entrada y
entregar la salida. Ya hemos visto dos maneras de hacer entrada:
La mayoría de los programas que ocupamos a diario no funcionan así, sino que tienen
una interfaz gráfica, compuesta por ventanas, menúes, botones y otros elementos, a
través de los cuales podemos interactuar con el programa.
Los programas gráficos, por otra parte, realizan acciones sólo cuando ocurren ciertos
eventos provocados por el usuario (como hacer clic en un botón, o escribir algo en una
casilla de texto), y el resto del tiempo se quedan esperando que algo ocurra, sin hacer
nada. El programa no tiene control sobre cuándo debe hacer algo. Esto requiere que
los programas sean estructurados de una manera especial, que iremos aprendiendo
de a poco.
Python incluye un módulo llamado Tkinter que provee todas las funciones necesarias,
que deben ser importadas al principio del programa:
Creación de la ventana
Al ejecutarlo, puede darse cuenta que el programa no termina. Esto ocurre porque la
llamada al método mainloop() se «queda pegada» esperando que algo ocurra. Esto se
llama un ciclo de eventos, y es simplemente un ciclo infinito que está continuamente
esperando que algo ocurra.
Todos los programas con interfaz gráfica deben seguir esta estructura: la creación de
la ventana al principio del programa y la llamada al ciclo de eventos al final del
programa.
Creación de widgets
Un widget es cualquier cosa que uno puede poner en una ventana. Por ahora,
veremos tres tipos de widgets sencillos, que son suficientes para crear una interfaz
gráfica funcional:
Un botón puede ser visto como un «llamador de funciones»: cada vez que un botón es
presionado, se hace una llamada a la función asociada a ese botón. Los botones no
tienen un análogo, pues los programas de consola se ejecutan de principio a fin
inmediatamente, y por esto no necesitan que las llamadas a las funciones sean
gatilladas por el usuario.
Para agregar un widget a un programa, hay que ocupar las funciones con los nombres
de los widgets (Label, Button y Entry). Estas funciones reciben como primer parámetro
obligatorio la ventana que contendrá el widget. Además, tienen parámetros opcionales
que deben ser pasados usando la sintaxis de asignación de parámetros por nombre.
Por ejemplo, el parámetro text sirve para indicar cuál es el texto que aparecerá en un
botón o en una etiqueta.
Por ejemplo, la siguiente sentencia crea un botón con el texto Saludar, contenido en la
ventana w:
b = Button(w, text='Saludar')
b.pack()
w = Tk()
l = Label(w, text='Etiqueta')
l.pack()
b = Button(w, text='Boton')
b.pack()
e = Entry(w)
e.pack()
w.mainloop()
Los widgets van siendo apilados verticalmente, desde arriba hacia abajo, en el mismo
orden en que van siendo apilados. Ya veremos cómo empaquetarlos en otras
direcciones.
Controladores
b = Button(w, text='Saludar')
no hay ninguna acción asociada a él. Al hacer clic en el botón, nada ocurrirá.
Para que ocurra algo al hacer clic en el botón, hay que asociarle una acción.
Un controlador es una función que será ejecutada al hacer clic en un botón.
Por ejemplo, supongamos que queremos que el programa imprima el mensaje Hola en
la consola cada vez que se haga clic en el botón que dice «Saludar». Primero, hay que
crear el controlador:
def saludar():
print 'Hola'
El siguiente ejemplo es un programa completo que tiene dos botones: uno para
saludar y otro para salir del programa. El controlador del segundo botón es la
función exit, que ya viene con Python:
def saludar():
print 'Hola'
w = Tk()
w.mainloop()
El programa se ve así:
Modelos
Mediante el uso de controladores, ya podemos hacer interfaces que hagan algo, pero
que siguen teniendo una limitación: las interfaces sólo reaccionan a eventos que
ocurren, pero no tienen memoria para recordar información.
Tkinter rovee varios tipos de modelos, pero para simplificar podemos limitarnos a usar
sólo modelos de tipo string. Un modelo puede ser creado de la siguiente manera:
m = StringVar()
Para modificar el valor del modelo m, se debe usar el método set, que recibe el valor
como único parámetro:
m.set('hola')
Para obtener el valor del modelo m, se debe usar el método get, que no recibe ningún
parámetro:
s = m.get()
Como los modelos creados por StringVar almacenan datos de tipo string, hay que
tener cuidado de hacer las conversiones apropiadas si se desea usar datos numéricos:
a = StringVar()
b = StringVar()
a.set(5) # es convertido a string
b.set(8) # es convertido a string
print a.get() + b.get() # imprime 58
print int(a.get()) + int(b.get()) # imprime 13
Usted podría preguntarse cuál es la razón para usar modelos en vez de usar las
variables propias de Python, —es decir, las que son creadas mediante asignaciones—
para almacenar los datos. Los modelos tienen la ventaja que es posible asociarlos a
elementos de la interfaz que responden automáticamente cuando el valor del modelo
cambia.
Por ejemplo, podemos asociar una etiqueta a un modelo. La etiqueta siempre mostrará
en la interfaz el valor que tiene el modelo, incluso cuando éste cambie.
Para asociar un modelo a una etiqueta, hay que usar el parámetro textvariable:
x = StringVar()
l = Label(w, textvariable=x)
l.pack()
Cada vez que cambie el valor del modelo x, el texto de la etiqueta será actualizado
inmediatamente.
x = StringVar()
e = Entry(w, textvariable=x)
e.pack()
Cuando se obtenga el valor del modelo mediante la llamada x.get(), el valor retornado
será lo que el usuario haya ingresado en el campo hasta ese momento.
Según la fuente:
http://www.manejandodatos.es/2014/10/formularios-modales-en-tkinter-con-python/
Formularios modales
Lo primero, vamos a crear el formulario base, con una clase main, donde creamos lo
previsto. Al pulsar el botón, se lanza un evento que llama al formulario modal, que
hemos construido con otra clase. Al inicializarlo, le transferimos el valor que queremos
modificar. Al ser una variable StringVar, puedes comprobar que mientras escribes,
cambia el valor. Si quieres controlar mejor los valores, la solución es “desvincular” el
valor a la hora de crear el Entry, y hacer la verificación de valor en la función ok.
Aquí tienes el código completo:
30 self.e.focus_set()
31 b = Button(self.top, text="OK", command=self.ok)
32 b.pack(pady=5)
33
def ok(self, event=None):
34
print "Has escrito ...", self.e.get()
35 self.valor.set(self.e.get())
36 self.top.destroy()
37
38 def cancel(self, event=None):
39 self.top.destroy()
40
41 root = Tk()
42 a = main(root)
43 root.mainloop()
44
45
46
47
Python proporciona dos niveles de acceso a los servicios de red. En un nivel bajo,
puede acceder a la ayuda básica de socket en el sistema operativo subyacente, lo que
le permite implementar clientes y servidores para ambos protocolos de conexión y
orientados a conexión.
Python también tiene bibliotecas que proporcionan mayor nivel de acceso a los
protocolos de red de nivel de aplicación específicos, tales como FTP, HTTP, y así
sucesivamente.
¿Cuál es Sockets?
Los Sockets son los extremos de un canal de comunicación bidireccional. Los Sockets
pueden comunicarse dentro de un proceso, entre los procesos en la misma máquina, o
entre procesos en diferentes continentes.
Termino Descripción
protocol Típicamente cero, esto puede ser utilizado para identificar una
variante de un protocolo dentro de un dominio y el tipo.
port Cada servidor escucha a los clientes que llaman en uno o más
puertos. Un puerto puede ser un número Fixnum puerto, una
cadena que contiene un número de puerto, o el nombre de un
servicio
El módulo Socket
Una vez que tenga objeto socket, a continuación, puede utilizar las funciones
necesarias para crear su programa de cliente o servidor.
Socket Methods
Metodo Descripción
s.connect() Este método inicia de forma activa la conexión del servidor TCP.
(Bloqueo).
Un Servidor simple:
Ahora llamar a la función bind (nombre de host, puerto) para especificar un puerto para
su servicio en el equipo dado.
A continuación, llamar al método accept del objeto devuelto. Este método espera hasta
que un cliente se conecta al puerto que ha especificado, y luego devuelve un objeto
conexión que representa la conexión a ese cliente.
Un Cliente simple:
Escribimos un programa cliente muy simple que se abre una conexión a un puerto
determinado 12345 y equipo dado. Esto es muy simple para crear un cliente de un
conector usando la función módulo de toma de Python.
Ahora ejecutar este server.py y luego correr el client.py para ver el resultado.
Ejemplo 1:
Ejemplo 2:
http://robologs.net/2015/06/20/construir-un-robot-bluetooth-con-arduino-y-python/
Se programará el robot para recibir órdenes por Bluetooth (adelante, atrás, gira…) y
después escribiremos un programa en Python para mover al robot con las flechas del
teclado.
¿Qué necesito?
En el ordenador hay que tener instalado el programa Blueman, y las librerías de
python pyserial y pygame.
Como microcontrolador usaremos Arduino.
También es necesario un chasis con motores para el robot. Puede ser prefabricado o
construido a piezas, no importa. Hay muchos tipos de chasis y controladores de
motores, así que no voy a hablar del montaje ni de cómo controlar los motores. Sólo
será necesaria una función para cambiar la velocidad, algo de este estilo:
Conexiones de la antena
Primero hay que conectar la antena Bluetooth a Arduino. Las conexiones serán estas:
Código de Arduino
Para cargarlo hay que desconectar la antena de los pines TX y RX.
int val;
1
2
void setup()
3 {
4 Serial.begin(9600);
5 delay(7000);
6
7 }
8
9 void loop()
10 {
11 if(Serial.available() >= 1)
12 {
val = Serial.read();
13
14
if(val == 'a')
15
{
16 motores(250,250);
17 }
Explicación:
La función void setup() inicia la comunicación Serial a 9600 baud y espera 7 segundos.
Así hay tiempo a conectar la antena.
1 void setup()
2 {
3 Serial.begin(9600);
4 delay(7000);
5
6 }
1 void loop()
2 {
if(Serial.available() >= 1)
3
{
4 val = Serial.read();
5
6 if(val == 'a')
7 {
8 motores(250,250);
9 }
Aparecerá una lista. Hay que darle con el botón derecho al nombre de la antena y
seleccionar “Pair”.
Pedirá introducir el Pin de la antena antes de conectarse. Una vez emparejado, hay
que pusar otra vez y seleccionar la opción “Dev B”. Esto permite comunicarse con la
antena a través de Serial.
25 if event.type == pygame.KEYUP:
26 ser.write('s')
27
28
Ejemplo3 ;
https://geekytheory.com/arduino-python-smtp-gmail/
¿ Qué es SMTP ?
El SMTP es un Protocolo para la transferencia simple de correo electrónico. En este
caso usaremos el SMTP server de Google.
Pueden consultar la librería de smtp de Python en el siguiente enlace
http://docs.python.org/2/library/smtplib.html
– PARTE 1: ARDUINO
El código de Arduino es realmente sencillo y, el montaje más aún, pues es colocar el
Sensor de Ultrasonido(HC-SR04). Además les invito a revisar el artículo
siguienteSensor de Ultrasonidos HC-SR04 para que tenga una idea más completa del
uso de este sensor, y si ya lo han leído espero que sea para refrescar la memoria.
PARTE 2:
Python
Vamos, ahora, con la parte del código en Python. Esta parte consiste en la
programación del código que nos permitirá leer los datos envíados desde el
Arduino. Llamaremos a este código arduino_smtp.py o como ustedes prefieran
llamarle.
Antes de escribir el código, tendremos que instalar la librería ‘python-serial’ para que
no nos de error en la ejecución:
Como pueden apreciar, tenemos que definir variables para usar el SMTP de
Google y estas son:
Para el funcionamiento de este método tendremos que hacer un while que tenga una
condición verdadera. En cristiano sería decir: mientras sea verdadero debe de hacer
tal cosa.
El código es el siguiente:
Resumen
Para diseñar un programa que tiene una interfaz gráfica, hay tres elementos
importantes que hay que tener en consideración.
Se puede revisar los siguientes enlaces para ampliar los conceptos vistos en esta
unidad:
o http://progra.usm.cl/apunte/materia/interfaces-graficas.html
o http://pharalax.com/blog/python-desarrollo-de-interfaces-graficas-con-
tkinter-labelsbuttonsentrys/
o http://gmendezm.blogspot.pe/2012/12/tutorial-tkinter-python-gui.html
o http://www.pythondiario.com/2014/11/aplicaciones-graficas-con-tkinter-
en.html
o http://www.toptechboy.com/tutorial/python-with-arduino-lesson-16-simple-
client-server-configuration-over-ethernet/
o https://geekytheory.com/arduino-python-smtp-gmail/