Как из консольного приложения сделать оконное python
Многие программы на сегодняшний день используют графический интерфейс, который более интуитивен и удобен для пользователя, чем консоль. И с помощью языка программирования Python также можно создавать графические программы. Для этого в Python по умолчанию применяется специальный toolkit - набор компонентов, который называется tkinter .
Библиотека tkinter доступна в виде отдельного встроенного модуля, который содержит все необходимые графические компоненты - кнопки, текстовые поля и т.п.
Базовым моментом в построении графических программ является создание окна. Затем в окно добавляются все остальные компоненты графического интерфейса. Поэтому создадим вначале простейшее окно. Для этого определим следующий скрипт:
Для отображения окна надо вызвать у него метод mainloop() , который запускает цикл обработки событий окна для взаимодействия с пользователем.
В результате при запуске скрипта мы увидим такое пустое окошко:
C помощью метода title() можно установить заголовок окна.
С помощью метода geometry() - размер окна. Для установки размера в метод geometry() передается строка в формате «Ширина x Высота». Если при создании окна приложения метод geometry() не вызывается, то окно занимает то пространство, которое необходимо для размещения внутреннего содержимого:
По умолчанию окно позиционируется в верхний левый угол экрана. Но мы можем изменить его положение, передав нужные значения в метод geometry() :
Теперь строка в методе geometry имеет следующий формат: «Ширина x Высота + координатаX + координатаY». То есть при запуске окно будет находиться на 300 пикселей вправо и на 250 пикселей вниз от верхнего левого угла экрана.
Создайте 4 окна с заголовками окон: "Top", "Bottom", "Right", "Left". Разместить окна по сторонам рабочего стола:
- вверх по центру,
- низ по центру,
- право по центру,
- лево по центру.
Создайте 4 окна с заголовками окон: "Top-right", "Top-left", "Bottom-right", "Bottom-left". Разместить 4 окна по углам рабочего стола.
Создайте окно, появляющееся в центре экрана, с заголовком "Center".
Текстовые и другие редакторы в заголовках программы указывают имя "активного файла - название программы".
Иконки окон не отображаются в системах MacOS, задача только для Windows: Найдите в интернете, как в tkinter сменить иконку, отображаемую в левом верхнем углу окна. И замените её, на любую другую иконку, которую можно скопировать из интернета или создать самому. Картинка для иконки обязательно должна иметь расширение .ico .
С помощью Auto PY to EXE можно с лёгкостью преобразовывать файлы .py в файлы .exe . Благодаря этому ваш проект на Python будет работать как десктопное приложение и вы сможете запускать приложение на других машинах без необходимости установки Python.
В этой статье я расскажу, как преобразовать проект на Python в исполняемый файл. Решение будет работать вне зависимости от количества файлов .py в приложении. Стоит учесть, что Auto PY to EXE работает только с Python 3.5 или выше.
Установка через pip
При помощи следующей команды можно установить текущую версию Auto PY to EXE.
Установка с GitHub
Также можно выполнить установку напрямую с GitHub. Для установки Auto PY to EXE с GitHub необходимо сначала клонировать репозиторий GitHub.
Затем нужно перейти в папку auto-py-to-exe .
Теперь необходимо запустить файл setup.py .
Можно также проверить версию при помощи следующей команды:
Проверяем версию
Текущая версия Auto PY to EXE 2.9.0 и теперь она установлена на ваш компьютер.
Чтобы открыть Auto PY to EXE, нужно выполнить в терминале следующую команду:
Откроется удобное приложение с GUI:
Интерфейс пользователя Auto PY to EXE
Теперь с помощью этого интерфейса можно преобразовать файл .py в .exe .
Шаг 1. Добавляем местоположение файла
Для преобразования .py в .exe сначала необходимо указать путь к файлу Python. Достаточно перейти к местоположению файла, который нужно преобразовать, а затем добавить путь.
Добавляем местоположение файла
Я добавил местоположение основного файла Python моего проекта. Здесь я использую для примера один из своих проектов на Python. Это приложение с GUI, визуализирующее различные алгоритмы сортировки. О создании этого проекта можно прочитать здесь: Build a Sorting Algorithm Visualizer in Python
Шаг 2. Выбор «One Directory» или «One File»
В интерфейсе есть опция выбора «One Directory» или «One File». Мой проект на Python содержит несколько других файлов, поэтому я выбрал «One Directory». Эта опция создаст папку со всеми необходимыми файлами, а также с файлом .exe .
One directory или One file
Шаг 3. Выбор «Console Based» или «Window Based»
После этого нужно будет выбрать тип приложения: консольное (Console Based) или оконное (Window Based). Если выбрать «Window Based», то это скроет весь консольный вывод приложения. Если ваш проект генерирует консольный вывод, то нужно выбрать «Console Based». Если у вас приложение с GUI или вам не нужно отображать пользователю консольный вывод, то выберите «Window Based». Я выбрал второй вариант, потому что моё приложение имеет GUI.
Console Based или Window Based
Шаг 4. Преобразование
Далее отобразятся другие опции, такие как добавление значков, дополнительных файлов и т.д. Выберите нужные опции самостоятельно. Ну а наш файл .py уже к преобразованию. Достаточно нажать на кнопку CONVERT .PY TO .EXE .
Для завершения процесса придётся немного подождать.
После завершения процесса можно будет выбрать опцию открытия папки с результатами.
По умолчанию папка с результатами будет создана там, откуда вы запускали Auto PY to EXE. Я открывал Auto PY to EXE с рабочего стола, поэтому папка создана на нём. В папке находится множество файлов и папок. Но нам важен файл с расширением .exe . В моём случае это main.exe . При двойном нажатии будет запускаться программа.
Готово! Наш проект на Python теперь преобразован в исполняемый файл. Его можно запускать на других компьютерах без необходимости установки Python.
Ресурсы
На правах рекламы
Серверы для всех, в том числе, и для разработчиков! VDS с посуточной оплатой на базе новейших процессоров AMD EPYC и хранилища на основе NVMe дисков от Intel для размещения проектов любой сложности, создавайте собственную конфигурацию сервера в пару кликов!
Интерфейс командной строки (CLI), представляет собой способ взаимодействия с компьютерами с помощью текстовых команд.
Многие инструменты, для которых не требуется графический интерфейс, написаны как инструменты / утилиты CLI. Хотя в Python есть встроенный модуль argparse , существуют и другие библиотеки с аналогичной функциональностью.
Эти библиотеки могут помочь нам в написании сценариев CLI, предоставляя такие услуги, как параметры синтаксического анализа и флаги, для гораздо более продвинутых функций CLI.
В этой статье обсуждается библиотека Python Fire, написанная Google Inc., полезный инструмент для создания интерфейса командной строки с минимальным кодом.
Общая форма приложений CLI
Прежде чем мы начнем с библиотеки Fire , давайте попробуем разобраться в основах программ интерфейса командной строки в целом. В зависимости от программы и команды общий шаблон интерфейса командной строки можно резюмировать следующим образом:
- prompt - это последовательность символов, которая предлагает пользователю ввести команду
- command - это имя программы, которую выполняет пользователь (например ls )
- parameters - это необязательные токены, которые дополняют или изменяют вывод команды
Программа CLI запускается путем ввода имени программы после появления prompt, в данном случае символа $.
Здесь мы используем команду ls , которая возвращает список имен файлов в каталоге, текущий каталог используется по умолчанию:
Вы можете изменить поведение или вывод программы командной строки, предоставив ей список токенов или параметров, более известных как флаги. Давайте попробуем флаги команды ls :
Как видите, после передачи флага -l мы получаем дополнительную информацию для каждой записи, такую как владелец, группа и размер файла.
Флаги, содержащие один дефис ( - ), называются короткими параметрами, а флаги с двумя дефисами ( -- ) - длинными. Оба вида можно использовать вместе в одной команде, как в следующем примере:
Разница между коротким и длинным вариантами:
- Короткие варианты можно объединить в цепочку
- Если мы хотим использовать короткие варианты как -l так и -a, мы просто вводим -al
- Короткие варианты обозначаются одним символом, а длинные варианты имеют полное имя, разделенное дефисом, и не могут быть объединены в цепочку.
Флаг --time-style работает с флагом -l и управляет форматом отображения времени для файлов каталога.
Интерфейс командной строки предоставляет пользователю простой способ настройки и запуска приложения из командной строки. Библиотека Python Fire позволяет легко добавить компонент обработки интерфейса командной строки в любой существующий скрипт Python.
Давайте посмотрим, как создать приложение из командной строки с помощью Python Fire.
Установка
Давайте продолжим и установим библиотеку, используя pip :
Python Fire работает с любым объектом Python, т.е. функциями, классами, словарями, списками и т. д. Давайте попробуем понять использование библиотеки Python Fire на некоторых примерах.
Создание приложения CLI с помощью Python Fire
Скажем, создадим сценарий fire_cli.py и поместим в него функцию:
При запуске этой программы в оболочке Python вывод будет:
Вызов fire.Fire() превращает модуль т.е. fire_cli.py в приложение Fire CLI. Более того, функция greet_mankind() автоматически отображается как команда.
Теперь мы можем сохранить и запустить приведенный выше сценарий как CLI следующим образом:
В качестве напоминания давайте разберемся с вызовом:
- $ - подсказка
- python - интерпретатор команд
- fire_cli.py - это модуль, содержащий команду CLI
- greet_mankind - это команда
Передача аргументов команде
Здесь у нас есть функция, которая принимает строку - name . Python Fire автоматически подбирает это, и если мы предоставим аргумент после вызова greetings , он привяжет этот ввод к параметру name . Мы также добавили комментарий как своего рода документацию к команде --help .
Вот как мы можем запустить эту команду из командной строки:
Приложение Fire CLI может использовать флаги --help для проверки описания команды, созданной из документов Python:
Установка функции в качестве точки входа
С небольшими изменениями мы можем контролировать отображение функции greetings() в командной строке и установить ее как точку входа по умолчанию:
Вот как мы сейчас запустим команду:
Итак, на этот раз нам больше не нужно вызывать команду, поскольку мы неявно определили точку входа greetings с помощью Fire() . Здесь следует отметить, что в этой версии мы можем передать только один аргумент:
Разбор аргументов
Библиотека Fire также работает с классами. Давайте определим класс CustomSequence , который генерирует и возвращает список чисел между start и end :
Вот как мы генерируем последовательность с помощью этой утилиты командной строки:
Мы использовали класс вместо функции, потому что, в отличие от функций, если мы хотим передать аргумент конструктору, он всегда должен быть представлен как флаг командной строки с двойными дефисами (например, --offset=2 ).
Следовательно, наше приложение CLI поддерживает необязательный аргумент --offset , который будет передан конструктору класса. Это изменяет вывод, контролируя разницу между двумя последовательными сгенерированными значениями:
Вот результат со значением смещения 2:
Аргументы конструктора всегда передаются с использованием синтаксиса флага, тогда как аргументы другим методам или функциям передаются позиционно или по имени:
Мы можем проверить использование команды generate с помощью флага --help . Это даст информацию об использовании CLI:
Использование --help с модулем дает нам информацию об использовании:
Флаги Fire
Интерфейс командной строки Fire имеет множество встроенных флагов. Мы уже видели --help еще один полезный флаг --interactive . Использование этого флага переводит нас в режим Python REPL с уже определенным модулем.
Это очень полезно для тестирования команд:
Обратите внимание, что флаги Fire должны быть отделены от других параметров двумя дефисами ( -- ), поэтому, если мы хотим использовать оба - -help и --interactive , это будет выглядеть примерно так:
Вывод
Библиотека Google Python Fire - это быстрый и простой способ создания интерфейсов командной строки (CLI) практически для любого объекта Python.
В этой статье мы рассмотрели, как установить Python Fire, а также сгенерировать простые интерфейсы командной строки.
Эта статья предназначена для тех, кто только начинает своё знакомство с созданием приложений с графическим интерфейсом (GUI) на Python. В ней мы рассмотрим основы использования PyQt в связке с Qt Designer. Шаг за шагом мы создадим простое Python GUI приложение, которое будет отображать содержимое выбранной директории.
Что нам потребуется
Нам понадобятся PyQt и Qt Designer, ну и Python, само собой.
В этой статье используется PyQt5 с Python 3, но особых различий между PyQt и PySide или их версиями для Python 2 нет.
Windows: PyQt можно скачать здесь. В комплекте с ним идёт Qt Designer.
macOS: Вы можете установить PyQt с помощью Homebrew:
$ brew install pyqt5
Linux: Всё нужное, вероятно, есть в репозиториях вашего дистрибутива. Qt Designer можно установить из Центра Приложений, но PyQt придётся устанавливать через терминал. Установить всё, что нам понадобится, одной командой можно, например, так:
После того как вы закончили с приготовлениями, откройте командную строку/терминал и убедитесь, что вы можете использовать команду pyuic5 . Вы должны увидеть следующее:
Если вы используете Windows, то, скорее всего, путь C:\Python36\Scripts (измените 36 на вашу версию Python) не прописан в вашем PATH . Загляните в этот тред на Stack Overflow, чтобы узнать, как решить проблему.
Дизайн
Основы
Теперь, когда у нас всё готово к работе, давайте начнём с простого дизайна.
17–19 декабря, Онлайн, Беcплатно
Откройте Qt Designer, где вы увидите диалог новой формы, выберите Main Window и нажмите Create.
После этого у вас должна появиться форма — шаблон для окна, размер которого можно менять и куда можно вставлять объекты из окна виджетов и т.д. Ознакомьтесь с интерфейсом, он довольно простой.
Теперь давайте немного изменим размер нашего главного окна, т.к. нам не нужно, чтобы оно было таким большим. А ещё давайте уберём автоматически добавленное меню и строку состояния, поскольку в нашем приложении они не пригодятся.
Все элементы формы и их иерархия по умолчанию отображаются в правой части окна Qt Designer под названием Object Inspector. Вы с лёгкостью можете удалять объекты, кликая по ним правой кнопкой мыши в этом окне. Или же вы можете выбрать их в основной форме и нажать клавишу DEL на клавиатуре.
В итоге мы имеем почти пустую форму. Единственный оставшийся объект — centralwidget , но он нам понадобится, поэтому с ним мы ничего не будем делать.
Теперь перетащите куда-нибудь в основную форму List Widget (не List View) и Push Button из Widget Box.
Макеты
Вместо использования фиксированных позиций и размеров элементов в приложении лучше использовать макеты. Фиксированные позиции и размеры у вас будут выглядеть хорошо (пока вы не измените размер окна), но вы никогда не можете быть уверены, что всё будет точно так же на других машинах и/или операционных системах.
Макеты представляют собой контейнеры для виджетов, которые будут удерживать их на определённой позиции относительно других элементов. Поэтому при изменении размера окна размер виджетов тоже будет меняться.
Давайте создадим нашу первую форму без использования макетов. Перетащите список и кнопку в форме и измените их размер, чтобы вышло вот так:
Теперь в меню Qt Designer нажмите Form, затем выберите Preview и увидите что-то похожее на скриншот выше. Выглядит хорошо, не так ли? Но вот что случится, когда мы изменим размер окна:
Наши объекты остались на тех же местах и сохранили свои размеры, несмотря на то что размер основного окна изменился и кнопку почти не видно. Вот поэтому в большинстве случаев стоит использовать макеты. Конечно, бывают случаи, когда вам, например, нужна фиксированная или минимальная/максимальная ширина объекта. Но вообще при разработке приложения лучше использовать макеты.
Основное окно уже поддерживает макеты, поэтому нам ничего не нужно добавлять в нашу форму. Просто кликните правой кнопкой мыши по Main Window в Object Inspector и выберите Lay out → Lay out vertically. Также вы можете кликнуть правой кнопкой по пустой области в форме и выбрать те же опции:
Ваши элементы должны быть в том же порядке, что и до внесённых изменений, но если это не так, то просто перетащите их на нужное место.
Так как мы использовали вертикальное размещение, все элементы, которые мы добавим, будут располагаться вертикально. Можно комбинировать размещения для получения желаемого результата. Например, горизонтальное размещение двух кнопок в вертикальном будет выглядеть так:
Если у вас не получается переместить элемент в главном окне, вы можете сделать это в окне Object Inspector.
Последние штрихи
Теперь, благодаря вертикальному размещению, наши элементы выровнены правильно. Единственное, что осталось сделать (но не обязательно), — изменить имя элементов и их текст.
В простом приложении вроде этого с одним лишь списком и кнопкой изменение имён не обязательно, так как им в любом случае просто пользоваться. Тем не менее правильное именование элементов — то, к чему стоит привыкать с самого начала.
Свойства элементов можно изменить в разделе Property Editor.
Подсказка: вы можете менять размер, передвигать или добавлять часто используемые элементы в интерфейс Qt Designer для ускорения рабочего процесса. Вы можете добавлять скрытые/закрытые части интерфейса через пункт меню View.
Нажмите на кнопку, которую вы добавили в форму. Теперь в Property Editor вы должны видеть все свойства этого элемента. В данный момент нас интересуют objectName и text в разделе QAbstractButton . Вы можете сворачивать разделы в Property Editor нажатием по названию раздела.
Измените значение objectName на btnBrowse и text на Выберите папку.
Должно получиться так:
Именем объекта списка является listWidget , что вполне подходит в данном случае.
Сохраните дизайн как design.ui в папке проекта.
Превращаем дизайн в код
Конечно, можно использовать .ui -файлы напрямую из Python-кода, однако есть и другой путь, который может показаться легче. Можно конвертировать код .ui -файла в Python-файл, который мы потом сможем импортировать и использовать. Для этого мы используем команду pyuic5 из терминала/командной строки.
Чтобы конвертировать .ui -файл в Python-файл с названием design.py , используйте следующую команду:
Пишем код
Теперь у нас есть файл design.py с нужной частью дизайна нашего приложения и мы начинать работу над созданием его логики.
Создайте файл main.py в папке, где находится design.py .
Используем дизайн
Для Python GUI приложения понадобятся следующие модули:
Также нам нужен код дизайна, который мы создали ранее, поэтому его мы тоже импортируем:
Так как файл с дизайном будет полностью перезаписываться каждый раз при изменении дизайна, мы не будем изменять его. Вместо этого мы создадим новый класс ExampleApp , который объединим с кодом дизайна для использования всех его функций:
В этом классе мы будем взаимодействовать с элементами интерфейса, добавлять соединения и всё остальное, что нам потребуется. Но для начала нам нужно инициализировать класс при запуске кода. С этим мы разберёмся в функции main() :
И чтобы выполнить эту функцию, мы воспользуемся привычной конструкцией:
В итоге main.py выглядит таким образом:
Если запустить этот код: $ python3 main.py , то наше приложение запустится!
Но нажатие на кнопку ничего не даёт, поэтому нам придётся с этим разобраться.
Добавляем функциональность в наше Python GUI приложение
Примечание Весь дальнейший код пишется внутри класса ExampleApp .
Начнём с кнопки Выберите папку. Привязать к функции событие вроде нажатия на кнопку можно следующим образом:
Добавьте эту строку в метод __init__ класса ExampleApp , чтобы выполнить привязку при запуске приложения. А теперь взглянем на неё поближе:
- self.btnBrowse : здесь btnBrowse — имя объекта, который мы определили в Qt Designer. self говорит само за себя и означает принадлежность к текущему классу;
- clicked — событие, которое мы хотим привязать. У разных элементов разные события, например, у виджетов списка есть itemSelectionChanged и т.д.;
- connect() — метод, который привязывает событие к вызову переданной функции;
- self.browse_folder — просто функция (метод), которую мы описали в классе ExampleApp .
Для открытия диалога выбора папки мы можем использовать встроенный метод QtWidgets.QFileDialog.getExistingDirectory :
Если пользователь выберет директорию, переменной directory присвоится абсолютный путь к выбранной директории, в противном случае она будет равна None . Чтобы не выполнять код дальше, если пользователь закроет диалог, мы используем команду if directory: .
Для отображения содержимого директории нам нужно импортировать os :
И получить список содержимого следующим образом:
Для добавления элементов в listWidget мы используем метод addItem() , а для удаления всех элементов у нас есть self.listWidget.clear() .
В итоге функция browse_folder должна выглядеть так:
Теперь, если запустить приложение, нажать на кнопку и выбрать директорию, мы увидим:
Так выглядит весь код нашего Python GUI приложения:
Это были основы использования Qt Designer и PyQt для разработки Python GUI приложения. Теперь вы можете спокойно изменять дизайн приложения и использовать команду pyuic5 без страха потерять написанный код.
Читайте также: