Kivy — Создание мобильных приложений на Python (Часть 1)

Мобильная разработка приложений вскоре обгонит компьютерную. Такая тенденция обрела устойчивый характер. Поэтому каждый разработчик рано или поздно столкнется с необходимостью создавать приложение для iOS или Android. К сожалению, встроенных инструментов в стандартную поставку языка для создания мобильных приложений нет. Тем не менее, есть пакеты, которые могут применяться для создания приложений для смартфонов. К таковым относится Kivy. Сегодня сделаем общий обзор базовых возможностей этой среды. Вообще, библиотеки – это главные элементы мира мобильных приложений, создаваемых с использованием Python. 

Фреймворк Kivy Python – ключевые особенности

Kivy – это фреймворк, созданный в 2011 году. Его главным преимуществом является мультиплатформенность. Поддерживаются операционные системы Windows, Mac, Linux, Raspberry Pi.

Помимо привычного для разработчика ПО для компьютеров ввода с использованием мыши и клавиатуры, в Kivy поддерживается ввод через сенсорный экран (в том числе, выполненный по технологии Multitouch). Более того, есть поддержка GPU-ускорения графики благодаря интеграции с OpenGL ES2. У библиотеки есть лицензия MIT, что позволяет бесплатно использовать ее. Но платные компоненты этого программного средства также имеются.

В процессе создания программы Kivy генерируется интуитивно понятный пользовательский интерфейс. Главное, чтобы у пользователя не появилось необходимости дополнительно обучаться. Сразу после запуска приложения должно быть понятно, что делать дальше.

Нативных элементов управления (виджетов) нет, все настраивается. Это делает возможным создание универсального интерфейса для разных платформ. Но это же может быть недостатком. Ведь нативное ПО сразу становится интуитивно понятным. 

Как установить Kivy?

Поскольку в Kivy есть большое количество зависимостей, рекомендуется его устанавливать в виртуальную среду Python. Также можно пользоваться встроенной библиотекой venv либо пакетом virtualenv.

Виртуальная среда Python создается так:

$ python3 -m venv my_kivy_project

По ходу выполнения этого действия файл Python скопируется в папку, которая будет называться my_kivy_project, где также будет несколько других папок.

Чтобы была возможность использовать виртуальную среду, ее необходимо активировать сначала. На операционных системах с ядром Unix можно это сделать, выполнив следующую команду.

$ source bin/activate

Учтите, что вы в этот момент должны находиться в каталоге my_kivy_project.

В случае с Windows, команда аналогичная, но активация скрипта должна осуществляться в другом месте – используя папку Scripts, а не bin.

После того как активируется среда Python, можно запустить pip, чтобы установить Kivy. На системах Unix для этого выполняется такая инструкция. 

Shell

$ python -m pip install kivy

На Windows установить немного труднее. В документации необходимо изучить соответствующий пункт

Пользователи Mac также могут установить Kivy, используя файл dmg

Во время инсталляции могут возникнуть проблемы. Чтобы их исправить, необходимо на странице загрузки ознакомиться с отдельными инструкциями по каждой из них.

Что такое виджеты в Kivy?

Понятие виджетов в Kivy несколько отличается от такого в ОС Android и iOS. Под ними подразумеваются элементы управления и интерфейса, которые могут отображаться пользователю или использоваться им.

Примеры виджетов: кнопки, выпадающие списки, вкладки. Фреймворк Kivy содержит большое количество виджетов.

Запуск приложения «Hello, Kivy!»

Чтобы понять, как происходит работа с этим фреймворком, обратите внимание на такую программу. 

from kivy.app import App

from kivy.uix.label import Label

 

class MainApp(App):

    def build(self):

        label = Label(text='Hello from Kivy',

                      size_hint=(.5, .5),

                      pos_hint={'center_x': .5, 'center_y': .5})

 

        return label

 

if __name__ == '__main__':

    app = MainApp()

    app.run()

Каждая программа, написанная с помощью Kivy, должна содержать подкласс App. Также разработчик должен переопределить метод build().

Здесь размещается код пользовательского интерфейса либо осуществляется вызов других функций, определяющих код UI. В этом примере создается виджет Label и передаются такие аргументы, как text, size_hint, pos_hint. Последние два являются опциональными. 

size_hint используется для передачи Kivy размеров виджета. Используется два значения:

  • x. Ширина элемента.
  • y. Высота элемента.

Каждое из чисел должно иметь значение, которое находится в диапазоне от 0 до 1. Значение каждого из этих показателей по умолчанию равняется единице. Помимо этого, возможно использование pos_hint, который нужен, чтобы задать месторасположение виджета в интерфейсе.

В приведенном выше фрагменте кода передается информация, что виджет должен размещаться в центре осей x и y.

Чтобы запустить программу, необходимо выполнить инициализацию класса MainApp и осуществить вызов метода run(). После того как будут совершены эти действия, на экране отобразится такой текст.Kivy - Создание мобильных приложений на Python (Часть 1)

Kivy также выводится большое количество текста в stdout, который может использоваться во время отладки программы.Kivy - Создание мобильных приложений на Python (Часть 1)

Теперь давайте добавим виджет Image и проанализируем его отличия от Label.

Что делает виджет Image в Kivy?

Kivy содержит несколько разновидностей, связанных с изображениями виджетов. Чтобы открывать картинки, расположенные на жестком диске, используется Image, а если изображение загружается из интернета, AsyncImage. Мы для примера будем использовать стандартный элемент Image

from kivy.app import App

from kivy.uix.image import Image




class MainApp(App):

    def build(self):

        img = Image(source='/path/to/real_python.png',

                    size_hint=(1, .5),

                    pos_hint={'center_x':.5, 'center_y':.5})




        return img




if __name__ == '__main__':

    app = MainApp()

    app.run()

 Этот код импортирует изображение из подпакета kivy.uix.image. Вообще, у класса Image большое количество различных параметров. Тем не менее нас интересует только source, который указывает на конкретную картинку, которая будет загружаться. Здесь задается полный путь к выбранной картинке. Остальная часть кода не отличается от предыдущего примера.

После того как мы выполним этот код, результат будет следующим.Kivy - Создание мобильных приложений на Python (Часть 1)

Таким образом, текст из прошлого примера был заменен на изображение. 

Теперь посмотрим, что делать для добавления и правильного расположения нескольких виджетов в программе.

Понятие разметки в Kivy

Каждый фреймворк имеет собственный метод, по которому осуществляется размещение виджетов. Например, wxPython задействует классификаторы, а Tkinter использует менеджер геометрии. В Kivy есть такое понятие, как Лейаут. Оно означает способ размещения виджетов, который используется в Kivy.

Лейаутов бывает несколько видов:

  1. BoxLayout.
  2. FloatLayout.
  3. GridLayout.

Найти полный перечень лейаутов, которые доступны в этом фреймворке, можно в документации.

Приведем такой фрагмент кода в качестве примера для BloxLayout. 

import kivy

import random




from kivy.app import App

from kivy.uix.button import Button

from kivy.uix.boxlayout import BoxLayout




red = [1,0,0,1]

green = [0,1,0,1]

blue =  [0,0,1,1]

purple = [1,0,1,1]




class HBoxLayoutExample(App):

    def build(self):

        layout = BoxLayout(padding=10)

        colors = [red, green, blue, purple]




        for i in range(5):

            btn = Button(text="Button #%s" % (i+1),

                         background_color=random.choice(colors)

                         )




            layout.add_widget(btn)

        return layout




if __name__ == "__main__":

    app = HBoxLayoutExample()

    app.run()

Здесь осуществляется импорт модуля BoxLayout, после чего он устанавливается. Затем создается перечень цветов RGB-палитры.

В результате образовывается цикл для range из 5, вследствие чего появляется по кнопке btn для каждой итерации. Давайте теперь сделаем интерфейс интереснее и изменим фон кнопки на случайный цвет. 

А потом добавим кнопку в лейаут с использованием layout.add_widget(btn).

После того как код запустится, результат будет приблизительно следующим.Kivy - Создание мобильных приложений на Python (Часть 1)

Поскольку кнопки здесь окрашиваются в случайные цвета, то у вас результат будет отличаться.

Нужно учитывать такие аргументы:

  1. Отступ между лейаутом и дочерними объектами. Он записывается в пикселях. Есть несколько способов, которыми можно его задать:
  • Список из четырех аргументов: [padding_left, padding_top, padding_right, padding_bottom].
  • Список из двух аргументов: [padding_horizontal, padding_vertical].
  • Один аргумент: padding=10.

2. Spacing. Этот аргумент добавляет расстояние между виджетами, которые относятся к определенному лейауту. 

3. Orientation. Изменяет значение orientation для BoxLayout по умолчанию – с горизонтального на вертикальное.

События в Kivy

События – один из центральных элементов Kivy. Они позволяют, например, выполнять определенные действия при нажатии клавиш, кнопок мыши либо тапа по дисплею. А если требуется вызвать функцию в будущем, используется концепт часов (Clock)

Также каждый элемент имеет свойства, которые работают вместе с EventDispatcher. С их помощью выполняется проверка достоверности. Также они запускают события, когда происходит изменение позиции виджета либо его размера.

Вот как работают события в Kivy. 

from kivy.app import App

from kivy.uix.button import Button

 

class MainApp(App):

    def build(self):

        button = Button(text='Hello from Kivy',

                        size_hint=(.5, .5),

                        pos_hint={'center_x': .5, 'center_y': .5})

        button.bind(on_press=self.on_press_button)

 

        return button

 

    def on_press_button(self, instance):

        print('Вы нажали на кнопку!')

 

if __name__ == '__main__':

    app = MainApp()

    app.run()

ОфисГуру
Adblock
detector