Cronómetro usando Python y Tkinter

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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

Vista previa de la GUI del cronómetro

🎯 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
✨ Revisar Solución y Practicar

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
✨ Revisar Solución y Practicar

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()
✨ Revisar Solución y Practicar

Crear los componentes de la 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)
✨ Revisar Solución y Practicar

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)
✨ Revisar Solución y Practicar

Establecer el tiempo

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))
✨ Revisar Solución y Practicar

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
✨ Revisar Solución y Practicar

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
✨ Revisar Solución y Practicar

Implementar la funcionalidad de reinicio

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)
✨ Revisar Solución y Practicar

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()
✨ Revisar Solución y Practicar

Ejecutar el proyecto

Finalmente, cambia a Escritorio y ejecuta el proyecto usando el siguiente comando:

python stopwatch.py
stopwatch project execution
✨ Revisar Solución y Practicar

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.