Ir ao conteúdo
  • Cadastre-se

Outro Data e Hora no Tkinter


Posts recomendados

Estou realizando estudos com Tkinter, dando umas olhadas nas partes gráficas, etc... Porém me deparei com uma situação.

Estou criando um programa que tenha uma rotina de registrar a entrada de algo, bem como seu nome, horário de entrada e por ai vai. A questão principal aqui é a respeito de mostrar a data e hora dentro da janela do programa, usando o seguinte código:

 

from tkinter import *
from datetime import datetime, timedelta
import os

root = Tk()
root.title('Teste')
root.geometry("400x400")

lbl = Label(root, text=f"{datetime.now(): %H:%M:%S}")
lbl.pack()

root.mainloop()

 

Até ai tudo bem, mas como podemos ver, o horário continua fixo, sem mudar o horário atual. O gênio então pensou a seguinte forma... Vamos colocar um update para atualizar a label e mudar o horário, mas como quero que ele faça essa atualização sempre, vamos colocar dentro de um loop para que ele sempre venha a mostrar no programa o horário atual. Então fiz o código da seguinte forma:

 

from tkinter import *
from datetime import datetime, timedelta
import os

root = Tk()
root.title('Teste')
root.geometry("400x400")

command = 1
while (command < 2):
	lbl = Label(root, text=f"{datetime.now(): %H:%M:%S}")
	lbl.update()
	lbl.place(x=0, y=0)

root.mainloop()

 

Obs.: Fiz a implementação do place no lugar do pack porque estava dando um erro na atualização do horário.

 

Bom, o problema está aqui! Se eu continuar desenvolvendo, colocando Buttons no programa, nada vai rodar porque ele ainda vai está no laço de repetição que coloquei para o horário funcionar. Neste caso, quero que ele mostre no programa a hora passando dessa maneira mas sem tirar a funcionalidade do resto do programa.

 

Quem tiver mais conhecimento com isso e souber outra forma de implementar a hora na janela do programa sem ser por esse método que usei ou tem alguma forma de reparar esse problema, já agradeço. Qualquer dúvida que tiverem em relação a isso que tentei explicar, pode deixar ai que tento ser o mais claro possível! Obrigado.

Link para o comentário
Compartilhar em outros sites

Depois de muitas pesquisas e buscando várias funções, consegui descobrir uma maneira bem mais prática. Estarei repassando para a galera que também tem interesse e quase não encontrou na internet!

 

Primeiramente faço a importação da biblioteca de tempo.

 

from time import strftime as time

 

depois crio uma definição para chamar todo o meu código do relógio (no qual denominei de tictac):

 

def tictac():

 

dentro dessa definição, chamo uma label que contém o meu "relógio digital" e sua variável eu coloco o nome de "relog".

 

relog = Label(root, text=time("%H:%M:%S"))
relog.pack()

 

criei uma variável que armazena também o horário atual tirando minha label, porque assim vou utilizada para "atualizar" a hora que estará dentro da label.

 

now = time("%H:%M:%S")

 

agora crio uma condição que fará toda a mágica:

 

if relog['text'] != now:
	if relog['text'] = now
relog.after(100, tictac)

 

Pelo que entendi... (Posso estar errado, se alguém com mais experiência souber o porque disso acontece, me corrija)

Ele diz que SE o texto que estiver dentro da variável relog for diferente do now, ele vai entrar no laço de repetição, onde já que a variável relog é igual ao now, basicamente ele substitui a variável relog pela que tem no now.
Em relog.after basicamente mando ele ficar atualizando a janela a cada 100 milissegundos dentro da função tictac.

 

Depois disso tudo, chamo a def tictac para que seja executado.

 

tictac()
root.mainloop()

 

Quem tiver dúvida ou ver se errei na explicação, me corrija ou deixe sua dúvida ai. valeu!!

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...