Kivy это фреймворк на Python с открытым исходным кодом для разработки кроссплатформенных приложений.
Нашел этот фреймворк, когда понадобилось написать мобильное приложения для получение данных по API с сайта на Django, вроде показался не очень сложным, а главное позволил создать приложение для Android на Python.
Это не учебник и не подробная статья по Kivy, а просто пример создания приложения уровня HelloWorld.
Для начала установим Kivy, согласно официальной документации через pip это делается командой:
pip install kivy[base]
Первая программа на фреймворке Kivy
После установки, проверим работоспособность kivy создав простое первое приложение, которое выведет нам Привет мир!
Создадим файл hello.py со следующим содержимым:
from kivy.app import App from kivy.uix.label import Label class MainApp(App): def build(self): label = Label(text=’Привет мир!’) return label if __name__ == ‘__main__’: app = MainApp() app.run()
Запускаем и видим наше приложение:
СОЗДАНИЕ ANDROID ПРИЛОЖЕНИЯ на PYTHON | KIVY
Каждому приложению Kivy требуется создать подкласс App и переопределить метод build(), что мы и сделали. Сюда мы поместили код, который создает виджет Label с переданным значением text.
В Kivy все элементы располагаются на layout и чтобы вывести несколько элементов (например слова «привет» и «мир» мы хотим разместить на разных виджетах Label), нам нужно расположить их на нем.
Всего существует 8 видов лайаутов, о них можно почитать в официальной документации: https://kivy.org/doc/stable/gettingstarted/layouts.html
Для нашего примера будем использовать BoxLayout, в нем все элементы располагаются друг за другом при горизонтальной ориентации или друг под другом при вертикальной.
Изменим метод build чтобы он возвращал нам не один элемент интерфейса, а слой с несколькими элементами:
def build(self): layout = BoxLayout() label1 = Label(text=’Привет’) label2 = Label(text=’мир!’) layout.add_widget(label1) layout.add_widget(label2) return layout
Не забудем импортировать BoxLayout
from kivy.uix.boxlayout import BoxLayout
Теперь запустим и увидим нужный результат:
Все работает, но не видно где заканчивается один Label и начинается второй. Например, я хочу поменять фон и работать с позиционированием элементов, для этого в киви существует язык разметки.
Сделаем отдельный файл с этой разметкой, он должен иметь расширение kv, по умолчанию метод run() будет искать с файл с именем нашего класса без App, т.е. в нашем случае main.kv
Перепишем пример выше, сначала код файла main.kv:
: Label: text: ‘Привет’ Label: text: ‘Мир’
Теперь изменим код hello.py на:
from kivy.app import App from kivy.uix.boxlayout import BoxLayout class MainWidget(BoxLayout): pass class MainApp(App): def build(self): return MainWidget() if __name__ == ‘__main__’: app = MainApp() app.run()
Запускаем скрипт и мы должны увидеть все тоже самое, если так, то ничего не сломалось и можно продолжить.
Создаем свое ANDROID приложение на PYTHON
Начнем доработку внешнего вида, для этого поменяем файл main.kv. Во первых сделаем разные цвета для наших Label и отделим их друг от друга:
: orientation: ‘vertical’ padding: 20 spacing: 20 Label: markup: True text: ‘[color=000000]Привет[/color]’ canvas.before: Color: rgba: 1, 1, 1, 1 Rectangle: pos: self.pos size: self.size Label: text: ‘Мир’ canvas.before: Color: rgba: 1, .5, 0, 1 Rectangle: pos: self.pos size: self.size
Усложняем программу
Теперь сделаем программу чуть сложнее чем Helloworld, сделаем чтобы мы вводили в нее свое имя и она с нами здоровалась.
Она должна выглядеть вот так:
Сверху картинка, потом поле ввода, потом надпись, потом кнопка.
Файл шаблона (main.kv) у меня получился таким:
: orientation: ‘vertical’ padding: 20 spacing: 20 Image: source: ‘hello.png’ TextInput: multiline: False size_hint: (.5, None) pos_hint: height: 50 font_size: 30 Label: font_size: 30 text: ‘Напишите как вас зовут’ Button: font_size: 30 text: ‘Поздороваться’ size_hint: (.5, None) pos_hint:
hello.png — это файл с картинкой с надписью hello, в моем случае он лежит в корне проекта
Теперь осталось сделать чтобы программа выполняла свою функцию и здоровалась с нами по нажатию кнопки «Поздороваться».
Сначала добавим в класс MainWidget добавим метод say_hello():
class MainWidget(BoxLayout): def say_hello(self): print(‘тест кнопки’)
Он будет вызываться по нажатию кнопки. Для того чтобы кнопка реагировала на нажатие, добавим ей атрибут on_press, который будет вызывать метод say_hello():
Button: font_size: 30 text: ‘Поздороваться’ size_hint: (.5, None) pos_hint: on_press: root.say_hello()
Если сейчас запустить программу и нажать на кнопку «Поздороваться», то в консоли мы получим сообщение «тест кнопки».
Если так, то пока все работает правильно
Дальше нужно сделать, чтобы в Label менялся текст на тот, который введен в виджете TextInput.
Для этого нам нужно получить доступ к свойству text этих виджетов.
Для этого импортируем класс ObjectProperty и создадим 2 экземпляра этого класса:
from kivy.properties import ObjectProperty class MainWidget(BoxLayout): hello_label = ObjectProperty() name_input = ObjectProperty() def say_hello(self): .
Теперь откроем файл main.kv и добавим индефикаторы для виджетов Label и TextInput, чтобы на них можно было ссылаться из других частей KV файла.
TextInput: id: name Label: id: hello
Теперь установим эти индефикаторы в значения свойств hello_label и name_input, которые мы определили в методе say_hello():
: orientation: ‘vertical’ padding: 20 spacing: 20 name_input: name hello_label: hello .
Теперь мы можем получить доступ к свойству text этих виджетов, изменим методе say_hello():
def say_hello(self): self.hello_label.text = ‘Привет ‘ + self.name_input.text
Собственно все, можно запустить программу и проверить, все должно работать.
Весь код файлов есть в репозитории на гитхабе https://github.com/alexandrtretyakov/kivy
Категории
Свежие записи
Источник: tretyakov.net
Учебник Kivy Python: создавайте привлекательные мобильные приложения на Python!
В этом руководстве по Kivy Python вы узнаете, как использовать Kivy для Python. разработка приложений. К концу вы поймете, как начать создавать кроссплатформенные приложения для Android, iOS и Windows с использованием Python.
Python — мощный, гибкий и начинающий дружественный язык программирования, который быстро превратился в один из самых популярных вариантов для разработчиков. Но хотя Python приветствует новичков и достаточно гибок для профессионалов, чтобы получить от него максимум, обычно требуется небольшая помощь.
Также прочтите: Как сделать игра на Python: введение в Pygame
То есть не так много всего, что вы можете построить с помощью Python из коробки. Если вы хотите создать игру, вам понадобится модуль Pygame. Если вы планируете создать веб-сайт, вам нужно будет использовать один из популярных фреймворков Python, например Flask.
Но что, если вы хотите создать приложение для Android? В таком случае вам понадобится Киви!
Kivy — это библиотека Python, поддерживающая кроссплатформенную разработку. Это означает, что вы можете использовать единую базу кода для создания приложений для Android, iOS и даже Windows, Linux и MacOS. Kivy предоставляет гибкие, современные элементы пользовательского интерфейса, и, конечно же, давайте продолжим использовать ваш новый любимый язык для создания всего этого!
Итак, с чего начать? Давайте узнаем в этом руководстве по Kivy Python.
Руководство по Kivy Python: настройка
Сначала необходимо загрузить и установить Kivy. К счастью, вы можете сделать это через pip. Итак, сначала убедитесь, что Python установлен на вашем компьютере. Если это не так, вы можете исправить это, следуя нашему полезному руководству:
Как установить Python и начать кодирование в Windows, Mac , или Linux
Затем вам нужно открыть командную строку в папке Python или добавить Python в PATH, если вы работаете в Windows. Или вы можете использовать терминал.
Затем перейдите к инструкциям, представленным на Kivy.org. Это даст вам подробное руководство по настройке и запуску.
Версия с заметками об обрыве: убедитесь, что у вас установлена последняя версия pip, wheel и virtualenv, выполнив следующую команду в командной строке:
python -m pip install —upgrade pip wheel setuptools virtualenv
Затем создайте виртуальную среду для вашего проекта Kivy:
python -m virtualenv kivy_venvkivy_venv Scripts activate
(или исходный код kivy_venv/Scripts/activate, если в терминале bash).
Если это не сработает, попробуйте использовать «py» вместо «python». Затем установите нужные вам зависимости. Они занимают немного места, поэтому, если вы хотите:
python -m pip install Docutils pygments pypiwin32 kivy_deps.sdl2 == 0.1. * Kivy_deps.glew == 0.1. * Python -m pip install kivy_deps.gstreamer == 0.1. * python -m pip install kivy_deps.angle == 0.1. * (Если у вас Python 3. 5+)
Наконец, установите сам Kivy и примеры:
python -m pip install kivy == 1.11.1python -m pip install kivy_examples == 1.11. 1
Опять же, вы можете следовать инструкциям на Kivy.org для получения более подробного руководства.
Выполнив все это, почему бы не взглянуть на один из примеров?
python kivy_venv share kivy-examples demo showcase main.py
Здесь вы найдете множество различных макетов кнопок и сможете взаимодействовать с ними; понимание типов пользовательских интерфейсов, которые вы можете создать с помощью разработки приложений Python с помощью Kivy!
Обратите внимание, что вам нужно будет создавать виртуальную среду каждый раз, когда вы начинаете разработку. Так что пока не закрывайте это окно CMD!
Ваше первое приложение
Для начала загрузите вашу IDE/редактор Kivy по выбору. Опять же, вы можете узнать, как это сделать, в нашем предыдущем посте. Я буду использовать Visual Studio.
Теперь введите следующий код:
import kivykivy.require (‘1.9.0’) from kivy.app import Appfrom kivy. uix.button import Labelclass HelloWorld (App): def build (self): return Label (text = «Hello Wolrd») helloWorld = HelloWorld () helloWorld.run ()
Чтобы запустить это, вы нужно будет вернуться в терминал/командную строку, найти файл и запустить его. Я назвал свой Python_Kivy_Example.py.
Если все прошло хорошо, вас встретят слова «Hello World!» вверх на экране:
Помните: вы должны быть используя среду Kivy, которую вы настроили для того, чтобы это работало. Если вы В этом скрипте, мы сначала импортируем Kivy и отдельные элементы, которые нам нужны (приложение и ярлык). Kivy.require () — это то, что мы используем для нацеливания на минимальную версию Kivy.
Затем мы создаем класс под названием HelloWorld с функцией под названием build , который вернет метку с текстом «Hello World» (по традиции).
Наконец, мы создаем наш объект Hello World и затем запустил его. Бум! Итак, у вас есть ваше первое приложение Kivy Python!
Что еще мы можем сделать
Это был очень простой вводный проект, чтобы показать вам, как Kivy работает для целей этого учебника Kivy Python.
Итак, что еще может сделать этот плохой мальчик?
Одна умная вещь, которую мы можем сделать с Kivy, — это отделить слой пользовательского интерфейса от кода — так же, как мы это делаем в Android Studio (где пользовательский интерфейс обрабатывается XML в отдельных файлах). Мы бы сделали это, создав отдельные файлы Kivy, которые затем могли бы отображать кнопки и тому подобное.
Итак, давайте создадим новый файл Kivy и назовем его HelloWorld. Добавьте сюда следующий код:
: text: «Hello World»
Убедитесь, что этот файл сохранен в той же папке, что и ваш файл Python. используя расширение «.kv», а затем немного отредактируйте исходный код:
import kivykivy.require (‘1.9.0’) from kivy.app import Appfrom kivy.uix.button import Labelclass HelloWorld (Приложение): def build (self): return Label () helloWorld = HelloWorld () helloWorld.run ()
Вы заметите, что все, что мы сделали, это удалили содержимое скобок, следующих за Ярлык . Важно, чтобы мы дали классу и файлу Kivy одно и то же имя, так как Python знает, как их связать! Нажмите «Выполнить», и вы увидите, что все выглядит так же, как и раньше!
Теперь вы можете делать такие вещи, как изменение цвета и размера метки:
: text: «Hello World» pos: 0, 100size: 100, 50color: .8, .9,0,1font_size: 32
Обратите внимание, что для того, чтобы это работало, вам также необходимо импортировать «цвет».
from kivy.graphics import Color
Если мы хотим разместить несколько виджетов в одном макете, нам нужно внести несколько небольших изменений . Вместо того, чтобы возвращать ярлык, мы вернем макет. Мы будем использовать макет коробки, который является одним из самых простых вариантов.
Это просто расположит ваши виджеты сверху вниз или слева направо, в зависимости от того, установлен ли он на «вертикальное» или «горизонтальное».
: Ориентация: ‘ вертикальный ‘Метка: текст:’ Метка 1 ‘Метка: текст:’ Метка 2 ‘Метка: текст:’ Метка 3 ‘
Затем вы можете отобразить это, используя следующий код:
import kivykivy.require (‘1.9.0’) из kivy.app import Appfrom kivy.uix.button import Labelfrom kivy.uix.boxlayout import BoxLayoutclass HelloWorld (App): def build (self): return BoxLayout () helloWorld = HelloWorld () helloWorld.run ()
Обработка нажатий кнопок
Следующее, что нужно любому хорошему руководству по Kivy Python, — это способ обработки событий и логики . Если мы хотим поменять эти метки на кнопки, мы можем сделать это очень просто, импортировав «Button» вместо метки и поменяв местами каждую ссылку.
Но мы не собираемся этого делать. Вместо этого, чтобы не усложнять задачу, мы будем использовать только одну кнопку. При нажатии этой кнопки на CMD/терминал будет выведено сообщение «Hello World».
Ваш KV-файл будет выглядеть следующим образом:
: BoxLayout: Ориентация: ‘vertical’Button: text:’ Button 1’on_press: root.button_pressed ()
Здесь мы добавили две новые интересующие функции: тег контроллера и on_press. Тег контроллера — это наш «корневой виджет». Все остальные виджеты в файле являются «потомками» этого корня. Другой интересный объект — «on_press».
Это вызывает функцию, которую мы добавляем в код.
Это код выглядит так:
import kivykivy.require (‘1.9. 0 ‘) из kivy.app import Appfrom kivy.uix.button import Buttonfrom kivy.uix.label import Labelfrom kivy.uix.boxlayout import BoxLayoutclass RootWidget (BoxLayout): def __init __ (self): super (RootWidget, self) .__ init __ ( ) def button_pressed (self): print («») class HelloWorld (App): def build (self): return RootWidget () helloWorld = HelloWorld () helloWorld.run ()
Как Вы можете видеть, что теперь мы возвращаем «RootWidget» в качестве нашего представления. Между тем, RootWidget имеет свой собственный класс, который содержит небольшой шаблонный код для инициализации представления, а также функцию button_pressed . Именно здесь мы
Appium + Genymotion + Python = | Полный гайд
Перед вами полноценный, пошаговый гайд (инструкция), о том, как подружить эмулятор андроида (и не только, но в это статье пока только об андроиде поговорим), Genymotion под операционной системой Windows (10/11). Это очень важно, так как у других операционных систем не наблюдается такого количество потенциальных багов. В статье мы пройдём все этапы установки и интеграции с appium, а так же научимся делать наш первый виртуальный клик. Если данная тема будет кому-то полезной, прошу, не стянетесь, оставляйте комментарии, и задавайте вопросы.
Прежде чем мы начнём, несколько слов о том зачем, и для чего это может понадобиться. Если у вас когда-то были мысли, а можно ли управлять андроид приложением так же круто, как браузером с помощью selenium? Так вот это именно та штука, позволяющая «тестировать» андроид приложения, с помощью python скриптов.
Помимо рядового выполнения произвольных действий, вы можете парсить данные из приложений. Например, вы можете создать полноценного бота для instagram, который будет имитировать действия реального человека, без риска получить бан. И на сладкое, данный эмулятор возможно использовать в качестве docker контейнера. Что это значит для вас? Вы сможете завести целую ферму из различных андроид устройств, с различными конфигурациями, управляя всем этим оркестром с помощью вашего python кода.
Этап 1 — Подготовка
Пожалуй важнейшим этапом, будет установка необходимых компонентов, без которых к сожалению ничего работать не будет. И это я не про софт из заголовка, но и про него тоже безусловно =)
Итак, что же нам пондобиться:
- Appium
- VirtualBox
- Genymotion
- Android sdk (нужно будет установить Android Studio)
- Java SE Development Kit (JDK)
Этап 1.2 — Установка софта
Думаю что с установкой первых трёх программ не должна вызвать каких либо трудностей, поскольку проходит полностью в автоматическом режиме. И да, надеюсь если вы читаете это у вас уже установлен python, и какое-либо окружение для работы с ним, в противном случае я думаю вам не стоит читать дальше.
Установка Android sdk
Тут в целом тоже всё довольно просто, однако важный момент заключается в том что вы обязательно должны запустить его после установки, и создать тестовый проект. Это нужно для того, что получить вот такое окно.
В вашем случае оно может выглядеть иначе (скрин с мака взять если что). Но самое главное тут есть, это пункт с Android SDK, его необходимо отметить галочкой (если он вдруг не будет отмечен). И только ради этого мы ставим всю студию.
p.s | Насколько мне известно, вы можете потому удалить студию, оставив только папку с SDK, но я бы не рекомендовал этого делать, так как информация не подтверждена и требует экспериментов.
С установкой JDK я надеюсь у вас тоже трудностей не возникнет, потому что она тоже автоматическая. Если будут какие-то ошибки в процессе, то придётся погуглить.
Этап 2 — Конфигурация
Приступаем как самому интересному, сборке нашего эмулируемого устройства, и его дальнейшее подключение к appium. Ничего сложного тут нет, но есть некоторые нюансы которые важно знать, то собственно ради чего я пишу данную стать, дабы сэкономить вам кучу времени на поиск причины отказа работать.
Этап 2.1 — Genymotion создаём устройство
После установки и запуска Genymotion, нас встречает окно браузера установленных конфигураций устройств, не заметить большой белый плюсик будет не просто, н всё же, если вы слабовидящей, или у вас дислексия как у меня, я сделал скрин.
После того как жмякните по плюсу, появиться не кислый список готовы конфигураций известный (и не очень), андроид устройств. Я рекомендую выбирать что-то небольшой, типа Pixel 2 или Nexus 5x, особенно если ресурсы вашего пк не особо мощные, вы не будите их тратить на отрисовку большого разрешение. Но между нами, с помощь рута (root), внутри самого андроида вы можете изменить конфигурацию на любую, что бы например различные сервисы вас идентифицировали иначе. После выбора устройства просто нажимаем NEXT
Очень важно, название устройства не должно содержать пробелов, иначе ничего работать потом не будет, и хрен вы об это где узнаете.
Имя устройство должно выглядит либо точно так же, либо аналогично. Каждый пробельный символ должен быть заменён на нижнее подчёркивание. Изначально будет НЕ так, и это крайне важно учесть.
Этап 2.2 — Genymotion Google Play
Если вы уже попробовали запускать виртуальный девайс, то скорее всего были обескуражены отсутствием гугл плэй, да и вообще гугловских сервисов. Это было сделано с точки зрения экономии, как пространства, так и ресурсов. Паниковать не стоит, ибо маркет ставить в два клика мышки.
Первичный процесс будет довольно длительным, особенно если у вас слабый интернет, но зато последующие установки будут за пару минут. После установки крайне рекомендую воспользоваться подсказкой, и перезагрузить устройство.
Этап 2.3 — Appium config
Переходим к самому интересному, для нормальной работы нашей будуще автоматизации, нам нужно два приложения:
Первая это своего рода ADB хаб маршрутизации запросов, а вторая намного интересней. Это своего рода аналог DevTools от хрома, только для андройда. С помощью этого инструмента мы можем инспектировать структуру любого приложения. Понять к каким элементам мы хотим применять нужны нам методы автоматизации.
Appium Server GUI
Начнём с простого, однако я почти нигде (даже в англоязычном ютубе), не нашёл описание правильной конфигурации, по этому и решил написать эту статью, ибо каждый элемент важен, и без этих параметров вам не получиться получить доступ к эмулируемому устройству.
Прежде всего вам необходимо запустить Appium Server GUI, сделать это можно с ярылка на рабочем столе, или из меню пуск. После запуска вас встретит окно быстрого запуска, но нам нужно настроить конфигурацию, кликаем на «Edit Configuration».
Теперь нужно ввести всего два пути, это путь до папки с установленным ранее Android sdk в моём случае это
Выглядеть это должно вот так, и конечно же не забываем нажать кнопку «Save and Restart»
Программа предложит сделать перезагрузку, однако после нажатия скорее всего ничего не произойдёт, это нормально, по этому вам следует самостоятельно закрыть приложение и открыть его снова (рекомендую проверить что конфигурация была успешно применение).
Appium Inspector
Очень важный и ответственный момент, освоение которого лично у меня вызвало больше всего времени и непоняток. Я постараюсь прояснить сразу, несколько важных эпитетов для понимания специфики работы данного софта.
- Конфигурация нужна для каждого устройства отдельная.
- Данное приложение ваш верный друг и товарищ.
- Если вы долго бездействуете, то соединение с сервером будет прервано (нужно будет перезапустить программу).
- Если в процессе появилось любое предупреждение, вам будет необходимо в нём разобраться (например нужны будут драйвера).
Перейдём непосредственно к настройкам, из-за которых я вчера потерял весь день, из-за глупой ошибки идиота с stackoverflow, который перепутал wd с wb.. Самое печальное, что эту ошибку допустило ещё с добрый десяток людей, и по факту никто не мог понять в чём дело. На маке и линуксе всё чиниться элементарно через параметры запуска, но винда у нас особенная, тут ничего толком не починить без доступа. Прежде всего настроим тот злополучный Remote Path, он должен быть равен: /wd/hub
Дальше нам необходимо сформировать JSON конфиг, в нём есть необходимые поля (то есть обязательные), а есть не очень, я покажу на пример своего конфига который вполне адекватно производит соединение.
Это минимальный конфиг для подключения, по этому кроме appium:deviceName я думаю тут пояснять нечего. Данная переменная отвечает за имя вашего виртуального устройства, именно по этому оно не должно иметь пробельных символов, иначе софт его не скушает.
Перед нажатием кнопки «Start Session» убедитесь что у вас работает Appium Server GUI, в противном случае вы получите ошибку вида: Could not connect to server….
Если ваше окно выглядит так, то смело можете стартовать сессию. В этом окне должны побежать строки, это говорит о том процесс пошёл успешно. А на экране эмулятора появиться уведомление об установки приложения Appium Settins, это необходимо для корректной работы, по этому не пугайтесь. После установки вы услышите характерный звук, и в окне Appium Inspector вы увидите рабочий стол вашего устройства, значит всё работает корректно, я поздравляю вас с завершением первого этапа.
Этап 3 — Пишем тест
Пришло время написать свой первый простенький тест, который будет тупо нажимать на звонилку, но это в первую очередь поможет вам понять принцип взаимодействия с эмулятором, а так же даст понять, корректно ли вы всё настроили. Итак, для начала я предложу вам в окне программы Appium Inspector, сделать клик в окне эмулятора, по значку телефона, и получить подобное содержимое:
Отсюда нам потребуется только xpath, по аналогии с DOM обычно html документа, мы можем обращаться к элементам операционной системе, просто обращаясь к ним таким образом.
Пишем и запускаем
А теперь нам потребуется любой редактор кода, в моём случае это будет PyCharm, я его обожаю) и не буду скрывать, я приобрёл лицензию на год, пусть это было не простой задачей, но оно того стоит. Перед запуском нам потребуется установить pip пакет самого appium, в теори можно по хардкору использовать и голый selenium, но там есть свои тонкости, об этом как-нибудь в другой раз, по сути appium это надстройка, которая помогает наладить взаимодействие, интерпретируя python код, в команды для adb шела.
- Разверните виртуальное окружение, или откройте терминал, или на худой конец cmd.
- Пишем команду pip install Appium-Python-Client
- Вставляем пример моего кода в окно своего редактора кода.
После запуска этого кода, у вас должно открыться приложение звонилки. Если нет, смотрите вывод логотв в терминале запуска вашего скрипта.
Ну а в следующих статьях я рассмотрю реальный кейсы автоматизации. Спасибо за внимание.
Источник: moonz.pro