красивое приложение на python
Реальные примеры приложений на Python и PyQT: от косынки до веб-браузера
Авторизуйтесь
Реальные примеры приложений на Python и PyQT: от косынки до веб-браузера
PyQt — набор «привязок» графического фреймворка Qt для языка программирования Python, выполненный в виде расширения Python. В нашей недавней статье мы рассмотрели создание простого приложения с использованием PyQt в связке с Qt Designer. Однако простым приложением функциональность PyQT не ограничивается. С его помощью можно создать приложения, начиная с привычного всем калькулятора и заканчивая веб-браузером. В этой статье мы рассмотрим 15 небольших десктопных приложений, написанных на Python с помощью PyQt. Приложения являются примерами использования разных частей фреймворка Qt, включая продвинутые виджеты, мультимедиа и другое. Исходники есть в этом репозитории на GitHub, так что спокойно скачивайте, изменяйте, экспериментируйте — в общем, делайте с ними всё, что душе угодно (в рамках лицензии MIT).
MooseAche
Пример веб-браузера, разработанного с помощью Python и Qt. Модуль QtWebEngineWidgets, представленный в Qt 5.6, даёт возможность просматривать веб-страницы в одном окне и использовать привычные элементы управления.
Mozzarella Ashbadger
Mozarella Ashbadger — революция среди браузеров! Возвращайтесь на вкладку назад и вперёд! Печатайте страницы! Сохраняйте файлы! Воспользуйтесь справкой! Любые совпадения с другими браузерами совершенно случайны.
Moonsweeper
Исследуйте таинственную поверхность луны Q’tee, но остерегайтесь пришельцев-аборигенов.
Moonsweeper — игра-головоломка, основанная на известном «Сапёре». Цель игры — исследовать поверхность вокруг зоны приземления вашего космического корабля, избегая встречи со смертоносными пришельцами расы B’ug. Детектор пришельцев подскажет, сколько ксеноморфов находится поблизости.
No2Pads
Простой клон Блокнота, написанный с помощью QTextEdit для поддержки более-менее всего необходимого функционала. Приложение умеет открывать, сохранять и печатать текстовые файлы.
Calculon
Простой калькулятор, интерфейс разработан в Qt Designer, а операции реализованы с помощью стека.
Megasolid Idiom
Текстовый редактор для ваших скучных документов без форматирования. Дополнение к блокноту, опять с использованием QTextEdit, но уже с богатыми возможностями редактирования текста.
NSAViewer
Приложение, которое позволяет делать снимки с помощью веб-камеры. Для взаимодействия с веб-камерой используется модуль QtMultimedia. Кроме того, имеется поддержка нескольких камер.
Failamp
Простое приложение для прослушивания аудио и просмотра видео-файлов с поддержкой плейлиста. Для работы с воспроизведением и плейлистом используются QtMultimedia и QtMultimediaWidgets.
Brown Note (QtDesigner)
Это приложение позволяет создавать временные записки на рабочем столе. Записки хранятся в базе данных SQLiteTake.
Piecasso (QtDesigner)
Проявите свою творческую натуру с PieCasso — единственным приложением для рисования со встроенными рисунками пирога.
Piecasso — клон Paint из Windows 95 с несколькими новыми функциями и вырезанными старыми. В программе доступны стандартные инструменты вроде кисти, карандаша, заливки, распылителя и множество фигур.
7Pez (QtDesigner)
Распаковывайте архивы с помощью кота. Перетащите архив на кота и нажмите на его голову, чтобы распаковать архив в той же папке.
Translataarrr (QtDesigner)
Переводчик с любого языка, поддерживаемого Google Translate, на пиратский. В приложении используются API для funtranslations.com и неофициальная обёртка над Google Translate для перевода на английский с других языков.
Raindar (QtDesigner)
Приложение, показывающее прогноз погоды в выбранном городе. Данные для прогноза берутся через API для OpenWeatherMap.
Doughnut (PyQtGraph)
Это приложение с помощью API для Fixer позволяет отслеживать курсы валют. По умолчанию отображаются курсы за последние полгода.
Ronery (QGraphicsScene)
Клон игры «Косынка» с Ким Чен Иром на рубашке карт. На внешнем виде различия между играми заканчиваются. В Ronery для работы с игровым полем используется QGraphicsScene.
Python & EEL. Делаем просто на Python’е и красиво на JS
Вступление
Тема красивых интерфейсов была и будет актуальна всегда. Кто-то использует для создания графических приложений C#, кто-то использует Java, кто-то уходит в дебри C++, ну а кто-то извращается с Python, используя tkinter или PyQT. Существуют различные технологии, позволяющие совмещать красоту графических дизайнов, создаваемых на HTML, CSS и JS с гибкостью в реализации логики приложения, которую может дать другой язык. Так вот, для тех, кто пишет на самом лучшем языке программирования Python, есть возможность писать красивые интерфейсы на HTML, CSS и JS и прикручивать к ним логику на Python.
В этой статья я хочу показать на небольшом примере, как же все таки создать простое и красивое десктопное приложение на HTML, CSS, JS и Python. В качестве библиотеки для связи всех компонентов будем использовать EEL.
Установка
Оговорюсь, что я работаю на windows 10 x64.
Для начала установим саму библиотеку выполнив простую команду:
pip install eel
После установки одной лишь библиотеки можно начинать наш путь.
Наше приложение будет выглядеть таким образом:
Логика приложения очень простая: при нажатии кнопки “рассчитать” считываются значения в поле для ввода рублей, полученные данные отправляются в Python, где происходит расчет курса валют. Python возвращает нам данные и мы выводим из через JS
Раскидываем по папкам
Разобьем теперь наш проект на модули. В папку “front” будем класть всё, что связано с графической частью нашего приложения. В папку “back” будем помещать все наши исходники на python. Еще создадим папку middle, в которую будем помещать методы, вызываемые из JS (об этом чуть позже). В Главной директории создадим файл main.py, он будет запускать наше приложение.
Логика на Python
В качестве теста реализуем простое приложение конвертер валют (да-да, банально, никому не надо, на гитхабе миллион проектов). Для этого на python установим библиотеку CurrencyConverter:
pip install currencyconverter
Теперь приступим к написанию логики на python. Реализуем метод, который на вход будет принимать сумму, валюту с которой нам надо перевести и валюту, на которую нам надо перевести. Создадим “convert.py” в директории “back” и запишем в него следующий код:
Теперь в директории “middle” создадим файл “mid_convert.py” и пропишем следующий код:
Что здесь вообще происходит? Файл “mid_convert.py” будет служит связующим звеном между JS и Python. Декоратор @eel.expose дает нашей программе понять, что функция, описанная ниже, может быть вызвана из JS. Таким образом, любая функция, которую мы в будущем захотим вызывать из JS, должна быть обернута декоратором @eel.expose. Очевидно, что не имеет смысла делать лишних модулей, если у вас простой проект, можно было обернуть декоратором функцию “convert_value” в модуле “convert.py”. В больших проектах разбиение программы на такие слои позволит легче расширять и оптимизировать код.
Подключаем Python к JS
Теперь подключим нашу логику на Python к самому JS. Для этого примера я использую простую страничку, сверстанную чисто при помощи HTML, CSS (или вы можете использовать популярные фреймворки, которые нужны вам для работы с графикой). Первым делом необходимо подключить библиотеку eel к самому JS:
Далее реализуем функционал кнопки “рассчитать”. По нажатию кнопки первым делом необходимо считать значение рублей и пойти по каждой валюте, чтобы перевести значение.
Обратите внимание на строку “let value_cur = await eel.convert_value_py(value_rub, «RUB», name_cur)();”. Важно, что вызов функции из питона происходит в асинхронном режиме, поэтому обязательно необходимо сделать асинхронной ту функцию, в которой есть вызов Python кода. При вызове функции из eel необходимо ставить пару (), где в первые круглые скобки будут передаваться наши аргументы.
Проверим, работает ли.
Как мы видим, все работает.
Запуск программы
Для запуска кода используем файл “main.py”. В нем импортируем библиотеку eel и всё, что мы писали в файле “min_convert.py” для того, чтобы при запуске проекта подтянуть все функции, которые мы оборачивали в eel.expose:
Теперь необходимо проинициализировать через eel ту директорию, где лежит front-end нашего приложения. При помощи команды eel.init(args). Далее для запуска самого приложения вызывает метод eel.start(args):
Метод eel.start принимает на вход несколько параметров (подробнее о них см. официальную документацию по eel). Самым интересным параметром является “mode”. При помощи него вы можете запустить свой проект, как в браузере, так и в виде отдельного приложения. Например, вы можете указать параметр “default”, в таком случае приложению будет запускать в браузере по умолчанию. Если у вас стоит google chrome, то указав параметр “mode=chrome” ваша программа откроется в виде отдельного приложения.
Также можно использовать chromium. Для этого скачиваем его с официального сайта. Разархивируем его в какую-нибудь папку и прописываем следующий код в нашем “main.py”:
Вывод
Как мы видим, то создавать красивые десктопные приложения с использованием Python в качестве языка для реализации основной логики не так сложно. Вы можете устанавливать какие угодно библиотеки, реализовать нужный код с использованием Python, а писать красивые интерфейсы на HTML,CSS и JS.
12 идей проектов на Python, которые украсят ваше портфолио
Перевод статьи «12 Unique Python Project Ideas for Your Resume».
Чтобы получить достойную работу в IT, пригодится профильное образование и диплом. Но далеко не все разработчики заканчивали вуз. Работу можно найти и благодаря собственным навыкам, доказательством которых служат личные проекты. Причем проекты — мера куда более объективная, чем диплом.
В этой статье мы разберем 12 идей проектов на Python, которыми можно пополнить свое портфолио. Все идеи — из разных областей.
«Проект закончен лишь тогда, когда он начинает работает на тебя, а не ты на него», — Скотт Аллен
1. Умный ассистент
Ассистент — хороший проект. Благодаря ему интервьюер поймет, насколько вы хороший питонист: знаете, как правильно использовать ресурсы и создавать из них что-то полезное.
Чтобы создать ассистента, не нужно быть специалистом в области разработки на Python. Вы можете сделать это с помощью доступных пакетов.
Для реализации подобного проекта вы можете использовать, например, Pyttsx3 для распознавания текста. А с помощью модуля os можно добавить функции вроде проигрывания музыки, запуска приложений, поиска по Википедии и т. д. Но запомните одно правило: «одна библиотека — одна функция».
Также вы можете расширить функционал своей программы, добавив агрегатор веб-страниц или автоматизацию рутинных задач. К примеру, можно добавить скрипт, который будет скрапить результаты поиска Google. Все это вы можете включить в функционал вашего ассистента, чтобы проект смотрелся внушительнее.
У этого проекта нет конечной точки. Чем больше функций, тем профессиональнее и полезнее ваш ассистент.
2. Веб-сайт
Создать свой сайт для портфолио — тоже хорошая идея. Можно создать «обычный» сайт: платформу для электронных платежей, образовательную платформу или что-то подобное. Но вы можете создать и сайт, который автоматизирует повседневные задачи и может использоваться в реальной жизни.
Например, ваш сайт может принимать список адресов электронной почты и отправлять введенное вами письмо на каждый из них. Или конвертировать PDF-файлы в аудио-файлы.
Наверняка у вас есть множество идей — воплотите их в жизнь.
3. Автоматизатор задач
Этот проект похож на первый, но с упором на автоматизацию.
Вы можете написать программу, автоматизирующую разные задачи. Например, для управления папками и файлами (переименование, удаление, перемещение). Полезным будет и скрипт, выполняющий SEO-действия в вашем блоге. Еще одна идея — скрипт, отправляющий поздравление друзьям на их день рождения.
Во всем этом вам помогут следующие библиотеки: BeautifulSoup (веб-скрапинг), Selenium (автоматизация действий в интернете), win10toast (уведомления Windows), os (менеджмент папок) и т. д.
Марк Лутц «Изучаем Python»
Скачивайте книгу у нас в телеграм
4. Игра
Создание игр — кропотливый и времязатратный процесс. Но вы можете создать полнофункциональную игру, и лучше этого ничего не придумаешь.
Игра говорит о своем разработчике многое: о его креативности, собранности. Также качество игры показывает, насколько хорошо разработчик знает концепты программирования и ООП.
Python имеет множество библиотек для создания игр. Вы можете пройти по этой ссылке и выбрать подходящую для вас — ссылка.
5. Разработка модели компьютерного зрения
Компьютерное зрение — тренд 21 века. Каждая компания внедряет компьютерное зрение в свои системы (в каком-либо виде). Существует множество успешных стартапов в данной области.
Если вы реализуете модель компьютерного зрения, вы покажете работодателю, как быстро вы адаптируетесь к новым технологиям.
Компьютерное зрение можно использовать в различных областях. Вы можете создать систему распознавания лиц, распознавания болезней посредством анализа рентгеновских снимков, программу для анализа дорожного трафика.
В экосистеме Python есть множество библиотек, которые помогут помочь вам в этом деле. Одна из лучших — OpenCV.
6. Разработка графического пользовательского интерфейса
Разработка GUI — интересный проект, который вполне можно включить в свое портфолио. Графический интерфейс — это то, что видит пользователь и то, с помощью чего он взаимодействует с вашей программой.
Пройдитесь вокруг дома, зайдите в местные магазинчики, узнайте об их нуждах и создайте программу с GUI, исходя из этих нужд. Запомните: хороший пользовательский интерфейс улучшает впечатление от вашей программы и повышает шансы заработать на ней деньги!
Tkinter — самая популярная библиотека Python для создания GUI. Правда, в ней может быть непросто разобраться, особенно если вы новичок. Но помимо Tkinter существует множество других GUI-библиотек, познакомиться с ними можно по ссылке.
7. Приложение для анализа настроения
Настроение — это наши мысли и чувства. Анализ настроения — это изучение субъективной информации в выражениях. Это сфера обработки естественного языка (Natural Language Processing, NLP). С помощью NLP мы можем распределить данные на позитивные, негативные или нейтральные. Для извлечения информации о настроении из текста используются различные техники обработки естественного языка.
Что касается личных проектов, вы можете написать приложение, которое будет определять настроение пользователя по его отзыву. Речь может идти об отзывах о ресторанах, торговых центрах или сайтах — распознавание настроения пользователей пригодится в любой сфере.
Вы можете предсказать, когда компаниям нужно начинать распродажи или предложить новый продукт. Вы поможете компаниям развивать их бизнес, а они вам — развить ваш стартап.
В этом деле вам помогут соответствующие библиотеки, а именно: NLTK, TextBlob, spacy, Gensim и CoreNLP.
8. Поисковый бот
Поисковый бот — это бот, который периодически просматривает сайты и извлекает нужную вам информацию.
Вы можете написать бота, который будет извлекать информацию из интернет-магазинов, сравнивать цену на два товара и возвращать ссылку на самый дешевый вариант. Также ваш бот может постоянно проверять цену на определенный товар и отправлять вам уведомление, когда, например, цена снижается или начинается распродажа.
А если добавить к поисковому боту немного автоматизации, вы получите продукт, который украсит любое портфолио.
Лучшие библиотеки для такого проекта — Beautiful Soup и requests.
9. Бот для алгоритмического трейдинга
Это больше, чем просто проект. Он может принести вам доход. Речь идет о боте, который автоматически продает и покупает акции в зависимости от цен.
Для новичков этот проект может показаться сложным. Если кратко, то вам нужно написать программу, которая получает две цены акций: нынешнюю и предыдущую. Следующий шаг — создание модели машинного обучения, способной предсказать будущую цену. После того, как ваш бот предскажет цену, сравните прогнозируемую стоимость акций с реальной. Если различие небольшое — поверьте в себя и начните торговать!
Этот проект, конечно же, займет много времени. Но если вы с ним справитесь, то точно получите достойную работу.
10. Пакет Python
Пакет Python — это папка с Python-файлами, которые выполняют определенные задачи. Пакеты помогают разработчикам писать меньше кода — нужно лишь импортировать пакет. Каждый пакет Python содержит в себе набор действий, которые выполняются согласно соответствующим инструкциям.
Создавать пакеты не так сложно — вы можете найти соответствующие руководства на YouTube.
11. Мобильное приложение
Считается, что Python не годится для создания мобильных приложений. Это не совсем так. Существует множество библиотек, которые могут помочь вам создать мобильное приложение.
Одна из них — Kivy. Это кроссплатформенная библиотека, с помощью которой можно создавать приложения и для Android, и для iOS.
12. Упрощение анализа данных
Если у вас есть базовые знания в области машинного обучения, вы, наверно, слышали о анализе данных. С него начинается любой проект в области ML.
Если вы принимали участие в проекте, связанном с дата сайенс, вы знаете, какие шаги нужны для подготовки данных для модели машинного обучения. Они одинаковы практически в любой области — обработка отсутствующих значений, категориальных данных или разделение данных на обучающую и тестовые выборки.
Все эти шаги являются общими для всех моделей машинного обучения.
Вы можете создать сайт, который будет принимать набор данных, обрабатывать его и возвращать результат. На таком сайте нужны лишь слайдеры, выпадающие списки и поля ввода.
При создании подобного сайта вы можете использовать библиотеку streamlit. Это библиотека с открытым исходным кодом, которая была создана для машинного обучения. С ее помощью вы можете писать меньше кода и создавать потрясающие приложения.
Итоги
Все проекты, которые мы обсудили в статье, — лишь идеи. Вы можете их развить или видоизменить до неузнаваемости. При этом каждый из них можно реализовать при минимуме усилий и даже без глубоких знаний.
Десктопное приложение на Python: UI и сигналы
Авторизуйтесь
Десктопное приложение на Python: UI и сигналы
Считается, что Python не лучший выбор для десктопных приложений. Однако, когда в 2016 году я собирался переходить от разработки сайтов к программному обеспечению, Google подсказал мне, что на Python можно создавать сложные современные приложения. Например blender3d, который написан на Python.
Но люди, не по своей вине используют уродливые примеры графического интерфейса, которые выглядят слишком старыми, и не понравятся молодёжи. Я надеюсь изменить это мнение в своем туториале. Давайте начнём.
Мы будем использовать PyQt (произносится «Пай-Кьют»). Это фреймворк Qt, портированный с C++. Qt известен тем, что необходим C++ разработчикам. С помощью этого фреймворка сделаны blender3d, Tableau, Telegram, Anaconda Navigator, Ipython, Jupyter Notebook, VirtualBox, VLC и другие. Мы будем использовать его вместо удручающего Tkinter.
Требования
Установка
Вам нужно установить только PyQt. Откройте терминал и введите команду:
Мы будем использовать PyQt версии 5.15. Дождитесь окончания установки, это займёт пару минут.
Hello, World!
Создайте папку с проектом, мы назовём его helloApp. Откройте файл main.py, лучше сделать это vscode, и введите следующий код:
Этот код вызывает QGuiApplication и QQmlApplicationEngine которые используют Qml вместо QtWidget в качестве UI слоя в Qt приложении. Затем, мы присоединяем UI функцию выхода к главной функции выхода приложения. Теперь они оба закроются одновременно, когда пользователь нажмёт выход. Затем, загружаем qml файл для Qml UI. Вызов app.exec(), запускает приложение, он находится внутри sys.exit, потому что возвращает код выхода, который передается в sys.exit.
Добавьте этот код в main.qml:
Этот код создает окно, делает его видимым, с указанными размерами и заголовком. Объект Text отображается в середине окна.
Старт 4 ноября, 9 месяцев, Онлайн, Беcплатно
Теперь давайте запустим приложение:
Вы увидите такое окно:
Обновление UI
Давайте немного обновим UI, добавим фоновое изображение и время:
Внутри типа ApplicationWindow находится содержимое окна, тип Rectangle заполняет пространство окна. Внутри него находится тип Image и другой прозрачный Rectangle который отобразится поверх изображения.
Если сейчас запустить приложение, то текст появится в левом верхнем углу. Но нам нужен левый нижний угол, поэтому используем отступы:
После запуска вы увидите следующее:
Показываем текущее время
Модуль gmtime позволяет использовать структуру со временем, а strftime даёт возможность преобразовать её в строку. Импортируем их:
Теперь мы можем получить строку с текущим временем:
Строка «%H:%M:%S» означает, что мы получим время в 24 часовом формате, с часами минутами и секундами (подробнее о strtime).
Давайте создадим property в qml файле, для хранения времени. Мы назовём его currTime.
Теперь заменим текст нашей переменной:
Теперь, передадим переменную curr_time из pyhton в qml:
Это один из способов передачи информации из Python в UI.
Запустите приложение и вы увидите текущее время.
Обновление времени
Для того чтобы обновлять время, нам нужно использовать потоки. Для этого я предлагаю использовать сигналы.
Чтобы использовать сигналы нам нужен подкласс QObject. Назовём его Backend.
У нас уже имеется свойства для строки со временем curr_time, теперь создадим свойство backend типа QtObject в файле main.qml.
Передадим данные из Python в qml:
В qml файле один объект QtObject может получать несколько функций (называемых сигналами) из Python.
Создадим тип Connections и укажем backend в его target. Теперь внутри этого типа может быть столько функций, сколько нам необходимо получить в backend.
Таким образом мы свяжем qml и сигналы из Python.
Мы используем потоки, для того чтобы обеспечить своевременное обновление UI. Создадим две функции, одну для управления потоками, а вторую для выполнения действий. Хорошая практика использовать в названии одной из функций _.
Создадим pyqtsignal и назовём его updated, затем вызовем его из функции updater.
В этом коде updated имеет параметр arguments, который является списком, содержащим имя функции «updater». Qml будет получать данные из этой функции. В функции updater мы вызываем метод emit и передаём ему данные о времени.
Обновим qml, получив сигнал, с помощью обработчика, название которого состоит из «on» и имени сигнала:
Теперь нам осталось вызвать функцию updater. В нашем небольшом приложении, использовать отдельную функцию для вызова сигнала не обязательно. Но это рекомендуется делать в больших программах. Изменим задержку на одну десятую секунды.
Функция bootUp должна быть вызвана сразу же после загрузки UI:
Всё готово
Теперь можно запустить программу. Время будет обновляться корректно. Для того, чтобы убрать рамку, вы можете добавить в qml файл следующую строку:
Так должен выглядеть файл main.py:
Вот содержимое файла main.qml:
Сборка приложения
Для сборки десктопного приложения на Python нам понадобится pyinstaller.
Чтобы в сборку добавились все необходимые ресурсы, создадим файл spec:
Настройки файла spec
Параметр datas можно использовать для того, чтобы включить файл в приложение. Это список кортежей, каждый из которых обязательно должен иметь target path(откуда брать файлы) и destination path(где будет находится приложение). destination path должен быть относительным. Чтобы расположить все ресурсы в одной папке с exe-файлами используйте пустую строку.
Измените параметр datas, на путь к вашей папке с UI:
Параметр console установим в false, потому что у нас не консольное приложение.
Параметр name внутри вызова Exe, это имя исполняемого файла. name внутри вызова Collect, это имя папки в которой появится готовое приложение. Имена создаются на основании файла для которого мы создали spec — main.py.
Теперь можно запустить сборку:
В папке dist появится папка main. Для запуска программы достаточно запустить файл main.exe.
Так будет выглядеть содержимое папки с десктопным приложением на Python:
О том, как использовать Qt Designer для создания UI приложений на Python читайте в нашей статье.