Cronómetro usando Python y Tkinter

PythonBeginner
Practicar Ahora

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

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

stopwatch project execution

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.

✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar