Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 2, 2012 19:44:32

3dpython
Зарегистрирован: 2012-10-02
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Таймер

Решил сделать для себя таймер который отсчитывает заданное время и показывает его от 0.
Получился вот такой код.
Хотел заменить sleep на threading но пока не вышло.
Хочу узнать можно было бы сделать это как то проще?

import datetime
import time
point_time = datetime.datetime.now()
p_hour = point_time.hour
p_minute = point_time.minute
p_second = point_time.second
ts=p_second+p_minute*60+p_hour*60*60
def timer(se, mt=0,ht=0):
    now_time = datetime.datetime.now()
    now_hour = now_time.hour
    now_minute = now_time.minute
    now_second = now_time.second
    tn=now_hour*60*60+now_minute*60+now_second+50+365+3600+3600 #цифры добавленны для теста таймера
    dt=tn-se
    print (dt)
    if dt>59:
        st=dt-(dt//60)*60
        mt=mt+dt//60
        print (mt)
    if mt>59:
        ht=ht+mt//60
        mt=mt-(mt//60)*60
        print(ht ,mt,st)
        
i=100  #время в секундах сколько отсчитать
while i>0:
    i=i-1
    time.sleep(1)
    timer(ts)

Отредактировано 3dpython (Окт. 2, 2012 19:58:31)

Офлайн

#2 Окт. 2, 2012 22:38:07

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Таймер

3dpython
Хотел заменить sleep на threading но пока не вышло.
Хочу узнать можно было бы сделать это как то проще?
import datetime
from threading import Timer
 
def tick(started=None):
    Timer(1.0, tick, args=(started,)).start()
    elapsed = datetime.datetime.now() - started
    print str(elapsed)
 
tick(datetime.datetime.now())

Офлайн

#3 Окт. 2, 2012 22:56:26

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Таймер

А не знатный костыль ли? Что, если tick будет выполняться дольше, чем интервал?

Офлайн

#4 Окт. 4, 2012 20:03:50

3dpython
Зарегистрирован: 2012-10-02
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Таймер

Запустил этот код в IDLE. Не выходит по клавишам cntr+C. И к секундам в конце добавилось 0,01.

Офлайн

#5 Окт. 7, 2012 01:30:40

3dpython
Зарегистрирован: 2012-10-02
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Таймер

Решил попробовать вывести его в gui. Используя задержку через after. Но выходит какойто глюк.
решил просто упростить код. через return Тоже глючит.

from tkinter import *
root=Tk()
x=0
def la(x):
    x=x+1
    lab['text'] = x
    lab.after(1000, la(x))
lab=Label(root, text=x)
lab.pack()
lab.after(500, la(x))
root.mainloop()

вопросы такие. Вообще как то так можно сделать что бы он заработал.? или Надо например функцию выносить в отдельный класс и уже вызвать его. Или как то подругому это делается?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version