Cronômetro com Python e Tkinter

PythonBeginner
Pratique Agora

Introdução

Neste projeto, criaremos uma aplicação de cronômetro simples usando Python e Tkinter. O cronômetro terá funcionalidades para iniciar (start), parar (stop), reiniciar (reset) e sair (quit). Usaremos a biblioteca Tkinter para os componentes da interface gráfica do usuário (GUI) e a biblioteca time para operações relacionadas ao tempo.

👀 Pré-visualização

Stopwatch GUI preview

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como importar as bibliotecas necessárias para GUI e operações relacionadas ao tempo
  • Como definir uma classe StopWatch que estende a classe Frame
  • Como criar componentes GUI para o cronômetro
  • Como atualizar o tempo decorrido e exibi-lo na GUI
  • Como implementar funcionalidades para iniciar, parar e reiniciar o cronômetro
  • Como criar uma função principal (main) para inicializar o objeto StopWatch e adicionar botões para interação

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Criar uma aplicação GUI usando Tkinter em Python
  • Trabalhar com operações relacionadas ao tempo em Python
  • Implementar funcionalidades para um cronômetro

Criar os arquivos do projeto

Primeiramente, crie um novo arquivo chamado stopwatch.py e abra-o no seu editor de código preferido.

cd ~/project
touch stopwatch.py
✨ Verificar Solução e Praticar

Importar as bibliotecas necessárias

No arquivo stopwatch.py, comece importando as bibliotecas necessárias. Precisamos de Tkinter para os componentes da GUI, ttk para widgets temáticos e time para operações relacionadas ao tempo. Adicione o seguinte código no início do arquivo:

from tkinter import *
from tkinter import ttk
import time
✨ Verificar Solução e Praticar

Definir a classe StopWatch

Em seguida, defina uma classe chamada StopWatch que estende a classe Frame. Usaremos esta classe para criar a funcionalidade do cronômetro. Adicione o seguinte código após as declarações de importação:

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()
✨ Verificar Solução e Praticar

Criar os componentes da GUI

Dentro da classe StopWatch, adicione um método chamado makeWidgets que cria e posiciona os componentes da GUI. Este método será chamado a partir do construtor. Adicione o seguinte código dentro da classe 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)
✨ Verificar Solução e Praticar

Atualizar o tempo decorrido

Adicione um método chamado _update dentro da classe StopWatch. Este método calculará o tempo decorrido e atualizará a GUI. Adicione o seguinte código dentro da classe StopWatch:

    def _update(self):
        self._elapsedtime = time.time() - self._start
        self._setTime(self._elapsedtime)
        self._timer = self.after(50, self._update)
✨ Verificar Solução e Praticar

Definir o tempo

Adicione um método chamado _setTime dentro da classe StopWatch. Este método formatará o tempo e atualizará a variável timestr. Adicione o seguinte código dentro da classe 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))
✨ Verificar Solução e Praticar

Implementar a funcionalidade de início

Adicione um método chamado Start dentro da classe StopWatch. Este método iniciará o cronômetro. Adicione o seguinte código dentro da classe StopWatch:

    def Start(self):
        if not self._running:
            self._start = time.time() - self._elapsedtime
            self._update()
            self._running = 1
✨ Verificar Solução e Praticar

Implementar a funcionalidade de parada

Adicione um método chamado Stop dentro da classe StopWatch. Este método irá parar o cronômetro. Adicione o seguinte código dentro da classe 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
✨ Verificar Solução e Praticar

Implementar a funcionalidade de reset

Adicione um método chamado Reset dentro da classe StopWatch. Este método irá resetar o cronômetro. Adicione o seguinte código dentro da classe StopWatch:

    def Reset(self):
        self._start = time.time()
        self._elapsedtime = 0.0
        self._setTime(self._elapsedtime)
✨ Verificar Solução e Praticar

Criar a função principal

Adicione uma função main fora da classe StopWatch. Esta função irá criar a janela principal da aplicação, inicializar o objeto StopWatch e adicionar botões para iniciar (start), parar (stop), resetar (reset) e sair (quit). Adicione o seguinte código após a classe 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()
✨ Verificar Solução e Praticar

Executar o projeto

Finalmente, mude para a Área de Trabalho (Desktop) e execute o projeto usando o seguinte comando:

python stopwatch.py
stopwatch project execution
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você criou com sucesso uma aplicação de cronômetro usando Python e Tkinter. Percorremos as etapas de criação dos arquivos do projeto, importando as bibliotecas necessárias, definindo a classe StopWatch, criando componentes da GUI (Graphical User Interface - Interface Gráfica do Usuário), atualizando o tempo decorrido, implementando a funcionalidade de iniciar (start), parar (stop) e resetar (reset), e criando a aplicação principal. Agora você pode executar o projeto e usar os botões para controlar o cronômetro.