Чернов Никита и Лузгина Ксения
Данная программа представляет собой клавиатурный тренажер, которая позволяет проверить свою скорость печати и количество опечаток по тексту.
Так же программа предоставляет статистику: вы можете отследить свою рекордную скорость, среднюю скорость и количество ошибок в сравнении с другими пользователями, пользующимися тренажером на одном ПК. Так же пользователям доступна динамика изменения скорости по дням.
Для того, чтобы начать пользоваться данной программой, вам понадобится Python 3. Все пакеты и библиотеки, использующиеся в реализации программы являются встроенными и не нуждаются в дополнительной установке.
Для запуска программы вы можете воспользоваться командной строкой или интерпретатором Python.
В случае, если вы пользуетесь командной строкой, убедитесь, что вы указали путь до файла main.py или что вы находитесь в той же папке. После в командную строку нужно ввести команду:
python3 main.py
Если вы пользуетесь интерпретатором, то просто запустите скрипт main.py.
Программа состоит из двух основных классов: UserStatistics и KeyboardTrainer.
Класс UserStatistics представляет статистику работы пользователя по набору текста, а класс KeyboardTrainer является графическим интерфейсом программы.
init(self, username):
Этот метод вызывается при создании нового экземпляра UserStatistics. Он инициализирует атрибуты экземпляра username, texts_typed, total_speed, training_history, mistakes_by_char и speed_dynamics.
add_result(self, speed, mistakes):
Этот метод вызывается, когда пользователь заканчивает набирать текст. Он добавляет скорость и ошибки в список training_history и обновляет атрибуты texts_typed и total_speed, а так же добавляет или обновляет значение скорости в данный день в speed_dynamics.
add_mistake(self, mistake_char):
Этот метод вызывается, когда пользователь делает ошибку при наборе текста. Он добавляет символ ошибки в словарь mistakes_by_char и увеличивает его значение на единицу.
get_avg_speed(self):
Этот метод вычисляет и возвращает среднюю скорость пользователя на основе атрибутов total_speed и texts_typed. Если атрибут texts_typed равен нулю, возвращается ноль, чтобы избежать ошибок деления на ноль.
save_to_file(self, filename):
Этот метод сохраняет атрибуты экземпляра в JSON-файл с указанным именем.
username(self):
Этот метод возвращает имя пользователя экземпляра класса.
load_from_file(cls, filename):
Этот метод класса загружает экземпляр UserStatistics из файла JSON с указанным именем файла. Если файл не существует, возвращается None.
init(self, user_statistics):
Этот метод вызывается при создании нового экземпляра KeyboardTrainer. Он инициализирует атрибуты экземпляра user_statistics, is_wrong_sequence. Он также устанавливает заголовок и размер главного окна и вызывает метод init_ui().
load_random_text(self, random_choice=True):
Если значение random_choice=True, этот метод загружает случайный текстовый файл из папки text и отображает его в текстовой метке рамки режима набора текста.
init_ui(self):
Этот метод инициализирует графический интерфейс программы. Он создает и упаковывает фрейм ввода имени и инициализирует кнопки переключения на фреймы выбора текста и динамики, а также настраивает их виджеты и расположение.
init_trainer_widgets(self):
Этот метод создает фрейм тренажера, создает поле для текста, теги для цветов и кнопки смены пользователя и статистики для переключения.
switch_to_text_choice_frame(self):
Это метод для перехода от окна ввода текста к окну выбора текстов.
populate_text_list(self):
Этот метод собирает файлы .txt из папки texts и передает их в окно выбора текста.
set_text(self):
Этот метод подгружает текст в текстовое поле тренажера.
count_texts(self):
Этот метод считает количество текстов, набранных пользователем и записывает в статистику пользователя.
display_results_texsts(self, sorted_users):
Этот метод создает окно статистики пользователей по количеству набранных текстов.
avarage_speed_print(self):
Этот метод высчитывает среднюю скорость для каждого пользователя и передает во фрейм статистики средней скорости пользователей.
display_avarage_results_speed(self, sorted_users):
Этот метод создает окно статистики средней скорости пользователей.
max_speed_print(self):
Этот метод высчитывает максимальную скорость для каждого пользователя и передает во фрейм статистики максимальной скорости пользователей.
display_max_results_speed(self, sorted_users):
Этот метод создает окно статистики максимальной скорости пользователей.
count_mistaces(self):
Этот метод подсчитывает общее количество ошибок для каждого пользователя и передает во фрейм со статистикой ошибок для всех пользователей.
display_count_mistaces(self, sorted_users):
Этот метод создает окно статистики общего количества ошибок для каждого пользователя.
switch_to_trainer_frame(self):
Этот метод переключает пользовательский интерфейс на фрейм режима набора текста. Он обновляет имя пользователя в экземпляре user_statistics, загружает данные экземпляра из файла JSON с помощью метода load_from_file() или создает новый экземпляр и сохраняет его в файл, если файла не существует. Затем он скрывает рамку имени и рамку статистики и отображает рамку режима набора текста с помощью методов pack_forget() и pack(). Он также обновляет метку статистики со средней скоростью и ошибками пользователя с помощью метода update_stats_label().
switch_to_name_frame(self):
Этот метод переключает пользовательский интерфейс на рамку ввода имени. Он сохраняет экземпляр user_statistics в файл JSON с помощью метода save_to_file(), скрывает рамки режима набора текста и режима статистики и отображает рамку ввода имени с помощью методов pack_forget() и pack(). Он также обновляет метку статистики с текущим количеством ошибок с помощью метода update_stats_label().
switch_to_stats_frame(self):
Этот метод переключает пользовательский интерфейс на фрейм статистики. Он сохраняет экземпляр user_statistics в файл JSON с помощью метода save_to_file(), скрывает рамки режима набора текста и ввода имени и отображает рамку статистики с помощью методов pack_forget() и pack(). Он также обновляет таблицу статистики со словарем mistakes_by_char экземпляра user_statistics с помощью метода update_stats_table().
update_username(self):
Этот метод обновляет атрибут username экземпляра user_statistics текстом из виджета ввода имени и обновляет текст метки username на рамке режима набора текста.
check_text(self, *args):
Этот метод вызывается всякий раз, когда текст в виджете ввода фрейма режима набора текста изменяется. Он сравнивает введенный текст с правильным и выделяет их разными цветами в зависимости от правильности. Если введенный текст правильный, он подсчитывает скорость набора и обновляет статистику пользователя с помощью метода add_result(). Если введенный текст завершен, сбрасывается режим набора с помощью метода reset(). Если введенный текст содержит ошибку, он выделяет неправильные символы красным цветом и обновляет счетчик ошибок методом add_mistake(). Он также обновляет метку статистики и метку результата с текущей скоростью и ошибками.
reset(self):
Этот метод сбрасывает режим набора текста, очищая виджет ввода, сбрасывая время начала и счетчик ошибок и загружая новый случайный текст с помощью метода load_random_text().
update_stats_label(self):
Этот метод обновляет текстовое поле статистики со средней скоростью и ошибками пользователя, используя метод get_avg_speed() и атрибут счетчика ошибок.
update_stats_table(self):
Этот метод обновляет таблицу статистики со словарем speed_dynamics экземпляра user_statistics. Сначала он очищает таблицу, а затем вставляет каждую пару ключ-значение в виде строки, используя метод insert() виджета Treeview.
Основная программа создает экземпляр UserStatistics с именем пользователя по умолчанию "Базовый пользователь", создает экземпляр KeyboardTrainer с экземпляром UserStatistics в качестве параметра и запускает основной цикл библиотеки tkinter.
В целом, программа предоставляет простой графический интерфейс для тренажера по набору текста с базовой статистикой. Класс UserStatistics предоставляет простой способ хранения и извлечения истории тренировок и ошибок пользователя. Класс KeyboardTrainer создает базовый графический интерфейс с фреймами для ввода имени, режима набора и смены текста, и отображения статистики, а также предоставляет методы для переключения между фреймами, загрузки случайных текстов, проверки введенного текста и обновления статистики. Библиотека tkinter используется для создания и управления виджетами графического интерфейса, а модули json и os - для сохранения и загрузки данных статистики пользователя в JSON-файл и из него.
Программа может быть улучшена путем добавления дополнительных функций, таких как несколько режимов набора текста, уровни сложности, отслеживание прогресса и аутентификация пользователя. Она также может выиграть от использования более современного и гибкого графического интерфейса, такого как Qt или wxPython. Тем не менее, программа служит хорошей отправной точкой для тех, кто хочет создать свой собственный тренажер по набору текста на клавиатуре или научиться использовать библиотеку tkinter.