Introducción
En este proyecto, crearemos una aplicación de cronómetro simple utilizando Python y Tkinter. El cronómetro tendrá la funcionalidad de iniciar, detener, reiniciar y salir. Utilizaremos la biblioteca Tkinter para los componentes de interfaz gráfica de usuario (GUI) y la biblioteca time para las operaciones relacionadas con el tiempo.
👀 Vista previa

🎯 Tareas
En este proyecto, aprenderás:
- Cómo importar las bibliotecas necesarias para las operaciones relacionadas con la GUI y el tiempo
- Cómo definir una clase StopWatch que extienda la clase Frame
- Cómo crear componentes de GUI para el cronómetro
- Cómo actualizar el tiempo transcurrido y mostrarlo en la GUI
- Cómo implementar la funcionalidad para iniciar, detener y reiniciar el cronómetro
- Cómo crear una función principal para inicializar el objeto StopWatch y agregar botones para la interacción
🏆 Logros
Después de completar este proyecto, podrás:
- Crear una aplicación de GUI utilizando Tkinter en Python
- Trabajar con operaciones relacionadas con el tiempo en Python
- Implementar la funcionalidad de un cronómetro
Crear los archivos del proyecto
Primero, crea un nuevo archivo llamado stopwatch.py y dile que se abra en tu editor de código preferido.
cd ~/proyecto
touch stopwatch.py
Importar las bibliotecas necesarias
En el archivo stopwatch.py, comienza importando las bibliotecas requeridas. Necesitamos Tkinter para los componentes de GUI, ttk para los widgets con tema y time para las operaciones relacionadas con el tiempo. Agrega el siguiente código al principio del archivo:
from tkinter import *
from tkinter import ttk
import time
Definir la clase StopWatch
A continuación, define una clase llamada StopWatch que extiende la clase Frame. Utilizaremos esta clase para crear la funcionalidad del cronómetro. Agrega el siguiente código después de las declaraciones de importación:
class StopWatch(Frame):
def __init__(self, parent=None, **kw):
Frame.__init__(self, parent, kw)
self._start = 0.0
self._elapsedtime = 0.0
self._running = 0
self.timestr = StringVar()
self.makeWidgets()
Crear los componentes de la interfaz gráfica de usuario (GUI)
Dentro de la clase StopWatch, agrega un método llamado makeWidgets que crea y coloca los componentes de la GUI. Este método se llamará desde el constructor. Agrega el siguiente código dentro de la clase StopWatch:
def makeWidgets(self):
l = ttk.Label(self, textvariable=self.timestr)
self._setTime(self._elapsedtime)
l.pack(fill=X, expand=NO, pady=2, padx=2)
Actualizar el tiempo transcurrido
Agrega un método llamado _update dentro de la clase StopWatch. Este método calculará el tiempo transcurrido y actualizará la GUI. Agrega el siguiente código dentro de la clase StopWatch:
def _update(self):
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._timer = self.after(50, self._update)
Establecer la hora
Agrega un método llamado _setTime dentro de la clase StopWatch. Este método formateará el tiempo y actualizará la variable timestr. Agrega el siguiente código dentro de la clase StopWatch:
def _setTime(self, elap):
minutes = int(elap / 60)
hours = int(minutes / 60)
seconds = int(elap - minutes * 60.0)
hseconds = int((elap - minutes * 60.0 - seconds) * 100)
self.timestr.set('%02d:%02d:%02d:%02d' % (hours, minutes, seconds, hseconds))
Implementar la funcionalidad de inicio
Agrega un método llamado Start dentro de la clase StopWatch. Este método iniciará el cronómetro. Agrega el siguiente código dentro de la clase StopWatch:
def Start(self):
if not self._running:
self._start = time.time() - self._elapsedtime
self._update()
self._running = 1
Implementar la funcionalidad de parada
Agrega un método llamado Stop dentro de la clase StopWatch. Este método detendrá el cronómetro. Agrega el siguiente código dentro de la clase StopWatch:
def Stop(self):
if self._running:
self.after_cancel(self._timer)
self._elapsedtime = time.time() - self._start
self._setTime(self._elapsedtime)
self._running = 0
Implementar la funcionalidad de restablecimiento
Agrega un método llamado Reset dentro de la clase StopWatch. Este método reiniciará el cronómetro. Agrega el siguiente código dentro de la clase StopWatch:
def Reset(self):
self._start = time.time()
self._elapsedtime = 0.0
self._setTime(self._elapsedtime)
Crear la función principal
Agrega una función main fuera de la clase StopWatch. Esta función creará la ventana principal de la aplicación, inicializará el objeto StopWatch y agregará botones para iniciar, detener, reiniciar y salir. Agrega el siguiente código después de la clase StopWatch:
def main():
root = Tk()
sw = StopWatch(root)
sw.pack(side=TOP)
Button(root, text='Start', command=sw.Start).pack(side=LEFT)
Button(root, text='Stop', command=sw.Stop).pack(side=LEFT)
Button(root, text='Reset', command=sw.Reset).pack(side=LEFT)
Button(root, text='Quit', command=root.quit).pack(side=LEFT)
root.mainloop()
if __name__ == '__main__':
main()
Ejecutar el proyecto
Finalmente, cambia a Escritorio y ejecuta el proyecto usando el siguiente comando:
python stopwatch.py

Resumen
¡Felicidades! Has creado con éxito una aplicación de cronómetro usando Python y Tkinter. Recorrimos los pasos de creación de los archivos del proyecto, importación de las bibliotecas necesarias, definición de la clase StopWatch, creación de componentes de interfaz gráfica, actualización del tiempo transcurrido, implementación de la funcionalidad de inicio, detención y reinicio, y creación de la aplicación principal. Ahora puedes ejecutar el proyecto y usar los botones para controlar el cronómetro.



