Всем привет, в этой статье я хочу рассказать о своем приложении для генерации QR-кодов.
Краткое описание: приложение называется MyQR, скачать для ПК можно на GitHub или на сайте проекта (фактически тоже GitHub). Написан проект на языке программирования Python, с использованием библиотеки PyQT5.

Функции приложения:
Генерация QR-кодов. Конечно, это основная функция. Приложение поддерживает создание кодов из различных типов данных: текст, ссылки, изображения, СМС, номера телефонов, контакты из телефонной книги, e-mail, геолокации или Wi-Fi сети. Самое интересное - генерация QR-кода с изображением. При создании такого кода изображение (для кодирования изображения необходимо ввести путь к нему) загружается на google-drive, и сгенерированный QR-код содержит ссылку на него.
Изменение стилей. Несомненно, это тоже важная функция. После создания кода, пользователь может изменить некоторые его параметры: масштаб изображения (в приложении он не виден, но при сохранении кода в изображение он учитывается), цвет фона, цвет кода, размер рамки и тип (сейчас доступны только обычные и micro-QR коды). Также можно изменить форму кода - доступны квадраты, точки, скругленные углы и даже ромбы.
Сохранение. После настройки всех параметров, сохраните полученный QR-код в удобном месте и расширении.


Система пакетной генерации. Безумно важная функция для бизнесменов. Импортируйте CSV файл с данными и создайте большое количество кодов нажатием одной кнопки, а перед этим настройте единый стиль для всех созданных кодов. Все они сохранятся в одной папке, выбранной пользователем.
Это небольшой проект, и я выкладываю статью здесь для того, чтобы узнать мнение других людей. Оставьте комментарий о моем проекте, скажите, важен ли он для общества или мне стоит заняться чем-то другим.
Комментарии (13)
danilovmy
16.07.2025 12:59ну во первых это просто GUI "для генерации QR-кодов через segno"
Во вторых, где хотя бы requirements.txt что бы самому проинсталлировать и пользоваться.
Во третьих, стоит все же убрать google credentials.
visuospatial
16.07.2025 12:59хороший проект, тем более для такого возраста. дальше — больше. уже с ранних лет пилишь пет-проект, выкладываешь на гитхаб и публикуешь статью на хабре. лично я считаю, что это уже достижение
возможно прилетят синьоры-помидоры, которые кидаются грязью, но ты их не слушай, если не конструктивная критика.
а насчет проекта. спроса именно на твой проект не будет велик, поэтому если ты рассчитывал на какой-то поток дохода, то его скорее не будет.
П.С. сайт тоже прикольный. малой уже разбирается в лэндинг-маркетинге. желаю только удачи!
vladislav_lukashenko
16.07.2025 12:59Люблю питон, не смог пройти мимо. Очень хороший код, структурированный, удобный для пользователя и расширяемый.
Что сказать про плюсы:
Гибкая архитектура: код разбит на логические модули (
QR
,HistoryManager
, диалоги), что упрощает масштабирование и сопровождение.Система истории: реализовано сохранение данных и стилей для повторного использования.
Стилизация интерфейса: оформлено в виде CSS-стилей (QSS), что делает UI современным и чистым.
Обработка ошибок: почти все действия обернуты в
try-except
, ошибки отображаются пользователю черезQMessageBox
.Проверка зависимостей при старте: предотвращает запуск без нужных модулей.
Режимы генерации QR-кодов: поддержка разных сценариев (телефон, SMS, WiFi, изображение и др.).
Проверка наличия директорий перед запуском (
qrs
,files
,crypto_keys
).Что можно было бы улучшить:
В
__prepare_data
есть повторяющийся блок для Email:
elif self.current_type == 2: # Email ... elif self.current_type == 2: # Email ...
Удали один блок.
is_big
в__upd_radio__
self.current_style["is_big"] = not (radio_check_1 and not radio_check_2)
Это запутанная логика. Гораздо понятнее:
self.current_style["is_big"] = self.ui.radioButton_2.isChecked()
Методы вроде
make_qr()
илиset_style()
выполняют и: подготовку данных, вызов генератора, стилизацию, и UI-отображение. Можно разделить бизнес-логику и GUI, чтобы упростить тестирование и повторное использование.Повтор
self.__upd_list__()
вmake_qr
Вызывается каждый раз перед генерацией QR, хотя логически это должно происходить при смене типа, а не при генерации. Это может запутать.Жёстко зашитые пути
f"C:\\Users\\{user}\\Documents\\MyQR.png"
Лучше использовать
os.path.join(os.path.expanduser("~"), "Documents", "MyQR.png")
Можно добавить минимальные unit-тесты для
HistoryManager
,QR
, и отдельных функций.
vindy
16.07.2025 12:59Вы бот/использовали чатгпт, да?
vladislav_lukashenko
16.07.2025 12:59Обидно немного. Но каюсь, использовал его чтобы структурировать ответ. Так как, чукча, как говорится, может и писатель но так себе. А вот проектик то поковырял и не только чтобы пальцем, во внутряночку глянул
vindy
16.07.2025 12:59Извините, если обидно, просто немного мозоль кровит от этих ии оборотов речи. Ничего личного:)
vladislav_lukashenko
16.07.2025 12:59та блин, а че лучше чтоль мое косноязычие читать?)) ахаха. Первый пост и предыдущий если сравнить, первый мне нравится больше
4kirill20
16.07.2025 12:59Наконец-то офлайн приложение! Спасибо
Онлайн сервисы не устраивали. Тестировал ПО на ПК, но все были плохи
Рекомендую в заголовок добавить «…для ПК» — для улучшения SEO поиска
apevzner
16.07.2025 12:59Очень крутой проект, с учётом возраста разработчика.
Пара мелких придирок.
Комментарии лучше писать по-английски. Иначе придет иностранный человек, захочет закинуть PR и не сможет разобраться. PR-ы от незнакомцев очень ценны, они означают, что проект обрастает своим сообществом (а автор проекта - лидер этого сообщества). Их надо всячески привечать (но не в ущерб качеству кода, приносимого незнакомцами).
Сами по себе коментарии должны отвечать на вопрос "что?" (что делает это место кода?). И, иногда, "зачем?" и "почему?". На вопрос "как?" отвечает сам код.
FurySeer
Отличная штука, ты молодец, продолжай в том же духе!