Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/25: Рейтинг темы: голосов - 25, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4

Создание секундомера с SimpleGUI

30.09.2014, 10:26. Показов 5156. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Создайте таймер с интервалом срабатывания 0.1 секунды, обработчик которого будет
увеличивать целое число, хранящееся в глобальной переменной. Это число будет
отслеживать время. Не забывайте, что функции create_timer() время задаётся в
миллисекундах (1мс – одна тысячная секунды).
Проверьте, что таймер работает правильно, печатая значение переменной времени в
консоли.
Не используйте для хранения времени числа с плавающей точкой. Скорее всего, такой
вариант можно будет заставить работать, но только с приложением больших усилий на
борьбу с погрешностями. Храните время с помощью целого числа, например 12 = 1.2
секунды.
2. Напишите обработчик рисования, который отобразит время в виде числа в центре холста.
Пока не задумывайтесь о красивом форматировании, просто используйте str() чтобы
преобразовать число в строку и вывести как есть.
3. Добавьте кнопки «Старт» и «Стоп», обработчики которых будут запускать и останавливать
таймер.
Затем добавьте кнопку «Сброс», которая останавливает таймер и сбрасывает время в 0.
При запуске программы секундомер должен быть остановлен.
4. Напишите вспомогательную функцию format(t), которая должна возвращать строку в
формате A:BC.D, где A – минуты, BС – секунды (B – цифра от 0 до 5), D – десятые доли
секунд.
Обратите внимание, чтобы возвращаемая функцией строка всегда содержала необходимые
ведущие нули:
format(0) = 0:00.0
format(11) = 0:01.1
format(321) = 0:32.1
format(613) = 1:01.3
Подсказка: используйте целочисленное деление (//) и остаток от деления (%) чтобы
получить значения A,B,C и D из исходного числа.
5. Добавьте вызов функции format() в обработчик рисования, чтобы получить законченный
секундомер.

Дополнительные расширения:
1. Превратите секундомер в тренажер реакции. Для этого добавьте к секундомеру два
счётчика, которые будут отслеживать, сколько раз секундомер был остановлен, и сколько
из них его удалось остановить в ровную секунду (1.0, 2.0, 3.0 и т.д.). Значение этих
счётчиков должно отображаться в верхней правой части холста в формате “x/y”, где y – общее число остановок секундомера, x – число остановок в ровную секунду.
2. Добавьте код, который не позволит увеличивать счётчики нажатием на кнопку «Стоп», если секундомер уже остановлен. Подсказка: для этого может быть полезно добавить булеву переменную, которая будет иметь значение True, если секундомер запущен, и False – если остановлен.
3. Модифицируйте обработчик кнопки «Сброс» так, чтобы он сбрасывал значения счётчиков в 0 при сбросе секундомера.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2014, 10:26
Ответы с готовыми решениями:

Создание секундомера
Напишите приложение секундомер. При нажатии на кнопку старт должен запускаться таймер. При этом заголовок кнопки старт меняется на стоп....

Создание секундомера
Необходимо написать секундомер, который начинает работать с момента открытия формы (то есть после Form1.ShowModal), как сделать так, чтобы...

Создание класса секундомера
Создайте класс секундомера. Члены класса: переменные типа double для хранения начального и конечного значения времени. Обязательны функции-...

8
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250
30.09.2014, 23:07
что конкретно не получается?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
01.10.2014, 00:11
uppjke, Ты похоже разделом ошибся, тут помогают найти ошибку или разобраться, а просто так выполнять чужие лабы тут не будут.
Тебе в раздел по фрилансу.
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
01.10.2014, 08:02  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import simplegui
 
message = 0
 
def start():
    global timer
    timer.start()
 
def stop():
    global timer
    timer.stop()
 
def reset():
    global message
    message = 0
    
def draw(canvas):
    canvas.draw_text(str(message), [50,112], 48, "Red")
 
def timer_handler():
    global message
    message += 1 
 
frame = simplegui.create_frame("Timer", 300, 200)
frame.add_button("Start", start)
frame.add_button("Stop", stop)
frame.add_button("Reset",reset)
frame.set_draw_handler(draw)
 
timer = simplegui.create_timer(1000, timer_handler)
 
frame.start()
не могу никак добавить форматирование
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
01.10.2014, 12:23
Лучший ответ Сообщение было отмечено uppjke как решение

Решение

Для форматирования строк используется метод строк format, пример есть тут http://pythonworld.ru/osnovy/f... ormat.html
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
02.10.2014, 23:09  [ТС]
В итоге получилось вот так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#Programm - Stopwatch
import simplegui
time = '0:00.0'
t = 0
game_count = 0
win_count = 0
is_going = 0
 
def format(t):
    global time
    milliseconds = t % 10
    sec = (t - milliseconds) / 10
    minutes = sec // 60
    seconds = sec % 60
    if seconds >=10:
        time = str(minutes) + ':' + str(seconds) + '.' +str(milliseconds)
    else:
        time = str(minutes) + ':0' + str(seconds) + '.' +str(milliseconds)
 
def start_button():
    global is_going
    is_going = 1
    timer.start()
    
def stop_button():
    global game_count, win_count, is_going
    timer.stop()
    game_count = game_count + is_going
    if time[-1] == '0' and is_going:
        win_count = win_count + 1
    is_going = 0    
    
def reset_button():
    global t, time, game_count, win_count, is_going
    game_count = 0
    win_count = 0
    is_going = 0
    timer.stop()
    t = 0
    format(t)
 
def timer_handler():
    global t
    t = t + 1
    format(t)
 
def draw(canvas):
    canvas.draw_text(time, (100, 100), 32, "Red")
    canvas.draw_text(str(win_count) + '/' + str(game_count), 
                     (250, 20), 20, "Green")
frame = simplegui.create_frame("Stopwatch", 300, 200)
timer = simplegui.create_timer(100, timer_handler)
 
frame.set_draw_handler(draw)
frame.add_button("Start", start_button, 100)
frame.add_button("Stop", stop_button, 100)
frame.add_button("Reset", reset_button, 100)
 
frame.start()
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
02.10.2014, 23:40
uppjke, Ссылку присланную мной как вижу читать не стали, ну что же, выбор ваш.
0
0 / 0 / 0
Регистрация: 30.09.2014
Сообщений: 4
05.10.2014, 13:19  [ТС]
ну как ни как всё работает идеально
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
05.10.2014, 14:02
Только правила хорошего тона не соблюли и выбрали не питонячий способ решения + если не ошибаюсь конкатенация строк более затратная операция чем форматирование.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.10.2014, 14:02
Помогаю со студенческими работами здесь

Создание точного секундомера
Доброго времени суток, уважаемые форумчане! Помогите, пожалуйста, начинающему дуболому. Попросили сделать секундомер для судейства....

Создание секундомера на JavaScript
Добрый вечер Подскажите, пожалуйста, начинающему надо сделать таймер который посередине страницы отчитывает большими буквами 4 секунды...

Создание секундомера на 580 эмуляторе
Нужно создать на данном эмуляторе секундомер от 0 до 59,соответствующие файлы прилагаются

Таймер с функцией секундомера. Создание динамического таймера
Имеется Таймер(секундомер) который вызывается клавишей button2. Как реализовать так чтобы при нажатии допустим клавишы button2 создавался...

М/с автономного секундомера
Возник вопрос, а есть ли что-то вроде DS1307, но чтобы в ней был еще и секундомер. Мне нужно, что бы в устройстве был отдельный счетчик,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru