/
sdsamyo
/
QR-code-generator
Обзор
Документация
Войти
/
sdsamyo
/
QR-code-generator
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
main.py
202 строки
8 KB
sdsamyo
Add menu
28 июн 2026, 22:22
Верифицирован
28 июн 2026, 22:22
72a809b
Код
Авторство
О чём код?
import os import logging as log from utils import (make_qrcode, check_data, check_and_create_folders, check_filename) # настройка модуля логирования log.basicConfig(level=log.INFO, filename='log.log', filemode='a', format='%(asctime)s %(levelname)s %(message)s', encoding='utf-8') # КОНСТАНТЫ OUTPUT_PATH = './OUTPUT' # СЛОВАРЬ С ПАРАМЕТРАМИ ДЛЯ ФОРМИРОВАНИЯ QR-КОДА qr_code = {'data': '', 'options': { 'version': '1', 'error_correction': 'L', 'fill_color': 'black', 'back_color': 'white' }, 'file_name': '' } # ГЛАВНОГО МЕНЮ def show_main_menu(): """Отображение главного меню приложения""" print("\n--- Меню QR-кода ---") print("1. Ввести данные для кодирования") print("2. Выбрать параметры") print("3. Сгенерировать и сохранить QR-код") print("4. Выйти из программы") print("--------------------") def main_menu(): """Действия главного меню приложения""" while True: show_main_menu() choice = input("Выберите пункт меню (1-4): ") if choice == '1': # Ввести данные для кодирования while True: qr_code['data'] = input('Введите данные для генерации QR-кода: ') if check_data(qr_code['data']): log.info(f'Введены данные для генерации QR-кода: {qr_code['data']}') break else: print('\nВведены неверные данные, попробуйте ещё раз.') log.error('Введены неверные данные для генерации QR-кода') elif choice == '2': # Выбрать параметры options_menu() elif choice == '3': # Сгенерировать и сохранить QR-код if qr_code['data']: file_name_input = input('Введите имя файла, если оставить поле пустым, имя будет сгенерировано автоматически: ') qr_code['file_name'] = check_filename(file_name_input) print(qr_code) make_qrcode(data=qr_code['data'], file_name=qr_code['file_name'], version=qr_code['options']['version'], error_correction_str=qr_code['options']['error_correction'], back_color_str=qr_code['options']['back_color'], fill_color_str=qr_code['options']['fill_color']) log.info(f'Сгенерирован QR-код: {qr_code}') else: print('\nВведите данные для генерации QR-кода.') log.error('Ошибка: Ввод не может быть пустым.') main_menu() elif choice == '4': # Выйти из программы print("\nВыход из программы. До свидания!") log.info('Выход из приложения.') exit(0) else: print("\nНеверный выбор. Пожалуйста, введите число от 1 до 4.") # МЕНЮ ПАРАМЕТРОВ def show_options_menu(): """Отображение меню параметров""" print("\n--- Параметры ---") print("1. Размер модуля (версия QR-кода)") print("2. Уровень коррекции ошибок (L, M, Q, H)") print("3. Цвет фона и кода (опционально)") print("4. Выйти в главное меню") print("--------------------") def options_menu(): """действия меню параметров""" while True: show_options_menu() choice = input("Выберите пункт меню (1-4): ") if choice == '1': while True: version = input('Введите версию для размера от 1 до 40 (версия 1 - 21х21 px, самый маленький): ') if version.isdigit(): qr_code['options']['version'] = int(version) if qr_code['options']['version'] >= 1 and qr_code['options']['version'] <= 40: break else: print('\nВведите число от 1 до 40.') else: print('\nВы ввели не число.') elif choice == '2': error_correction_menu() elif choice == '3': fill_color = input('\nВведите цвет кода (black, red и т.д. или в формате RGB (234,15,9),\nесли оставить поле пустым, то будет выбран цвет по умолчанию - black):') back_color = input('\nВведите цвет фона (black, red и т.д. или в формате RGB (224,151,92),\nесли оставить поле пустым, то будет выбран цвет по умолчанию - white):') if fill_color: qr_code['options']['fill_color'] = fill_color if back_color: qr_code['options']['back_color'] = back_color elif choice == '4': main_menu() else: print("\nНеверный выбор. Пожалуйста, введите число от 1 до 4.") # МЕНЮ КОРРЕКЦИИ ОШИБОК def show_error_correction_menu(): """Отображение меню выбора коррекции ошибок""" print("\n--- Уровень коррекции ошибок ---") print("1. L - 7% ошибок;") print("2. M - 15% ошибок;") print("3. Q - 25% ошибок;") print("4. H - 30% ошибок.") print("5. Выйти в меню параметров") print("6. Выйти в главное меню") print("--------------------") def error_correction_menu(): """Действия меню выбора коррекции ошибок""" while True: show_error_correction_menu() choice = input("Выберите пункт меню (1-6): ") if choice == '1': qr_code['options']['error_correction'] = 'L' options_menu() elif choice == '2': qr_code['options']['error_correction'] = 'M' options_menu() elif choice == '3': qr_code['options']['error_correction'] = 'Q' options_menu() elif choice == '4': qr_code['options']['error_correction'] = 'H' options_menu() elif choice == '5': options_menu() elif choice == '6': main_menu() else: print("\nНеверный выбор. Пожалуйста, введите число от 1 до 6.") if __name__ == '__main__': os.system('cls') log.info('Запуск приложения.') # Проверка папок на существование folders = [OUTPUT_PATH] check_and_create_folders(folders) # МЕНЮ main_menu()