• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

Temporizador

9 mensagens neste tópico

Pessoal, bom dia.

Como é que eu construo um temporizador em Python? Já estive a dar uma vista de olhos ao modulo time mas não fiquei muito elucidado e todas as minhas tentativas de fazer um por mim... como é que hei de pôr isto.. falharam redondamente :P

Queria algo que me contasse o tempo.. bastava isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algo estilo isto?

>>> import time
>>> first_time = time.time()
>>> time.sleep(5)
>>> second_time = time.time()
>>> diferenca_tempo = second_time - first_time
>>> print "A diferenca de tempos foi de %s segundos" % (int(diferenca_tempo))
A diferenca de tempos foi de 8 segundos

(Tens de contar o tempo que demorei a escrever, por isso é que não dá os 5 segundos).

Apesar de isto dar no IDLE, não dá quando eu escrevo num ficheiro de texto para executar,

Estranho...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

rolando2424, e se fizeres int() ao time.time()?

Anyway anaryin, caso não tenhas percebido, o teu código vai para onde o rolando2424 tem o time.sleep() ;) ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Original exception was:

Traceback (most recent call last):

  File "./time.py", line 3, in <module>

    import time

  File "/home/rolando/Desktop/time.py", line 5, in <module>

    first_time = int(time.time())

TypeError: 'module' object is not callable

Continua a dar o esmo erro...

já agora, o time.time() faz return do Tempo Unix (ou Epoch) (dá uma vista de olhos no Wikipédia).

Basicamente, ele pode saltar um segundo nalguns casos, e ele só faz return de segundos, por isso se a pessoa demorar mais que um minuto, não irá ver o tempo em "Demorou 1 minuto e 45 segundos.", veria "Demorou 105 segundos."

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei o que o time.time() faz ;)

Anyway, o problema está no nome do ficheiro. Não lhe podes chamar time.py, experimenta tempo.py ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu percebi depois ;) O sleep retarda a função em x segundos ;) é giro ;) Thanks guys!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu sei o que o time.time() faz ;)

Anyway, o problema está no nome do ficheiro. Não lhe podes chamar time.py, experimenta tempo.py ;)

hum... Bem visto, deve de ser disso (é por isso que ele estava a criar um time.pyc ;))

EDIT: E não é que resultou? :D

rolando@main-computer:~/Desktop$ ./time2.py

A diferenca de tempos foi de 5

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Txii a ressuscitar topicos mortos  :D

Mas tinha aqui um timer escrito por mim há algum tempo e aproveito para deixar aqui o meu contributo....

# -*- coding: cp1252 -*-
from Tkinter import *
import thread, sys, tkMessageBox, os, time 
         
master_color="black"
b_bgcolor="#0c305c"
b_fgcolor="white"
b_abgcolor="white"
b_afgcolor="#0c305c"
        
l_fgcolor="red"
l_bgcolor="black"
l_afgcolor="black"
l_abgcolor="red"

    
class Gui(Frame):

    def __init__(self, master=None):

        self.log_out=0 #flag que identifica o estado do login/log out

        frame=Frame.__init__(self, master, bg=master_color) #configuração da frame
        if os.name=="nt":
            self.master.attributes('-alpha', 1, '-disabled', False, '-toolwindow', True, '-topmost', True) #configuração do comportamento da janela sempre visível, barra pequena e transparência
        self.screenx=self.master.winfo_screenwidth() #detecta a resolução do ecrã
        
        self.posicaox=str(self.screenx/2-170)#mantém a janela sempre centrada
        

        self.master.title("Timer by NewBeen") #título da janela
        self.master.maxsize(340, 25)# tamanho máximo |evita o redimensionar da janela
        self.master.minsize(340, 25)# tamanho mínimo|   ||        ||

        self.master.geometry("300x25+"+self.posicaox+"+0") #tamanho da janela e sua posição
        self.pack(side=TOP, fill=BOTH) #pack frame principal
        self.master.config(bg=master_color) #configuração da janela principal
        self.estado=1 #flag de estado de gerenciamento da janela
        self.master.overrideredirect(self.estado) #opção para pôr e tirar o gerenciamento da janela
        self.master.bind("<Button-3>",self.estadu) #botao direito do rato põe o gerenciamento da janela
            
        self.Create()#chamada para a criação de botões, labels, janelas, etc...
        
    def timer(self, label1): #timer função que conta o tempo decorrido

        
        self.t_inicial=time.time()
        self.t_actual_m=0
        self.t_actual=0
        self.t_actual_h=0

        while self.log_out==1: #testa enquanto o login estiver activo, usar intertools era mais efeciente 8-)
                        
            if self.t_actual >= 59:
                self.t_actual_m+=1
                self.t_inicial=time.time()
            if self.t_actual_m >=60:
                self.t_actual_h+=1
                self.t_actual_m=0
            
            time.sleep(0.5) #paragem de meio segundo na actualização do tempo segundo, nao bloqueia o gui
            self.t_actual=time.time()-self.t_inicial-1
            if self.t_actual <10:
                self.label1.config(text="  Tempo Execução - %i:%i:0%i "%(self.t_actual_h, self.t_actual_m, self.t_actual)) #actualização do label com o tempo actual
            else:
                self.label1.config(text="  Tempo Execução - %i:%i:%i  "%(self.t_actual_h, self.t_actual_m, self.t_actual))

        self.tp_usado=[self.t_actual_h, self.t_actual_m, self.t_actual]
        
            
    def TimerStart(self, label1): #thread
        thread.start_new_thread(self.timer, (label1,)) #abre um thread para o tempo para evitar o bloqueio do gui
    
    def Create(self):
        
        self.label=Label(self, text=" Timer by Newbeen:      ", bg=l_bgcolor, fg=l_fgcolor).pack(side=LEFT)
        
        self.label1=Label(self, text="  Tempo Execução - 00:00:00  ", bg=l_bgcolor, fg=l_fgcolor, width="23", font=('Arial',9,'bold'))
        self.label1.pack(side=LEFT)
        
        self.botao1=Button(self, text="X", bg=l_bgcolor, fg=l_fgcolor, activeforeground=l_afgcolor, activebackground=l_abgcolor, command=sair)
        
        self.botao2=Button(self, text="Iniciar", bg=b_bgcolor, fg=b_fgcolor, activeforeground=b_afgcolor, activebackground=b_abgcolor, command=self.inicia)
        self.botao2.pack(side=LEFT)
            
        self.botao1.pack(side=RIGHT)
    
    def estadu(self, e=None):
        
        if self.estado==1:
            self.master.overrideredirect(0)
            self.estado=0
            
        elif self.estado==0:
            self.master.overrideredirect(1)
            self.estado=1
            


    def inicia(self):

        if self.log_out==0:
            self.log_out=1
            self.TimerStart(self.label1)
            self.botao2.config(text=" Parar  ")
            if os.name=="nt":
                self.master.attributes('-alpha', 0.5)
            
        elif self.log_out==1:
            self.log_out=0
            self.botao2.config(text="Iniciar")
            if os.name=="nt":
                self.master.attributes('-alpha', 1)
    
            
def sair():
    resposta=tkMessageBox.askyesno("Sair", "Deseja mesmo sair?")
    if resposta==True:
        os._exit(1)


Tk().protocol("WM_DELETE_WINDOW", sair)          
guiFrame=Gui()
guiFrame.mainloop()

Esta aqui tem algumas funções engraçadas para windows :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Corrigi-te uns erros de português lá pelo meio :)

Pá, raises destes valem a pena :P Bom tópico :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora