Simultaneidade no Tkinter usando o método 'after'
Ao trabalhar com aplicativos GUI no Tkinter, é crucial manter a capacidade de resposta ao executar outras tarefas. Um cenário comum é a necessidade de manipular elementos da UI após um certo atraso. No entanto, usar 'time.sleep' pode levar ao congelamento da IU.
Para resolver esse problema, o Tkinter fornece o método 'after', que permite agendar uma função a ser chamada após um atraso especificado, sem bloquear o loop de eventos principal.
Considere o código a seguir, onde uma caixa de texto é atualizada após 5 segundos usando 'time.sleep':
def empty_textbox(): textbox.insert(END, 'This is a test') sleep(5) textbox.delete("1.0", END)
Neste código, a função 'empty_textbox' inclui uma chamada para 'sleep(5)', fazendo com que o programa pause por 5 segundos. Durante esse período, a IU não responde, dificultando a interação do usuário.
Usando o método 'after'
Em vez de usar 'time.sleep', podemos utilizar o método 'depois' para atingir nosso objetivo. Aqui está uma versão modificada do código:
def empty_textbox(): textbox.delete("1.0", END) textbox.insert(END, 'This is a test') textbox.after(5000, empty_textbox)
Neste código, o método 'after' é usado para agendar a função 'empty_textbox' para ser chamada após um atraso de 5.000 milissegundos (5 segundos). Isso permite que o programa prossiga com outras tarefas enquanto a função agendada aguarda para ser executada. Uma vez decorrido o atraso, a função 'empty_textbox' é invocada, excluindo o texto da caixa de texto.
Ao utilizar o método 'after', você pode obter o comportamento desejado sem bloquear a execução do programa ou congelar o IU. Isso garante uma interface responsiva e fácil de usar, ao mesmo tempo que permite a ocorrência de ações cronometradas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3