Рубрики
Без рубрики

Учебник для начинающих Kivy: Базовый ускоренный курс для приложений в Kivy

Ищете быстрый ускоренный курс по Киви? Этот пост охватывает основы приложений на Kivy.

Автор оригинала: Kuldeep.

Kivy -это кросс-платформенная платформа Python с открытым исходным кодом для разработки приложений, использующих инновационные пользовательские интерфейсы с несколькими касаниями.

Предпосылки

Чтобы работать с Kivy, вы должны быть знакомы с Python.

Содержание

В этом посте будут рассмотрены очень простые приложения (абсолютные новички в Kivy), в которых вы просто добавляете (+1) или вычитаете (-1) с помощью 2 кнопок и обновляете новое значение до метки. К концу этого урока у вас будут (я надеюсь) некоторые хорошие знания и понимание того, как работать с Kivy. Вот некоторые из вещей, которые мы рассмотрим в этом посте:

  • Приступая к работе
  • Метод App( ) и макет сетки в деталях
  • Что такое метод build и что он делает?
  • Структурирование вашего приложения
  • Что такое on_release и id?
  • Свойство объекта
введите описание изображения здесь

Приступая к работе.

Хорошо, тогда давайте начнем с черного окна, которое ничего не делает.

Создать main.py файл.

from kivy.app import App
from kivy.uix.gridlayout import GridLayout


class Container(GridLayout):
    pass


class MainApp(App):

    def build(self):
        self.title = 'Awesome app!!!'
        return Container()

if __name__ == "__main__":
    app = MainApp()
    app.run()

и создайте файл main.kv

:
    rows: 1

Текущая структура файла :

Basic_app/
    -  main.py
    -  main.kv

и вот оно у вас есть.

введите описание изображения здесь

Метод App( ) и макет сетки в деталях

Давайте остановимся на секунду и посмотрим, что мы там сделали.

from kivy.app import App

Одна из вещей, которую я люблю в Kivy, заключается в том, что она очень хорошо документирована, и документы очень легко понять. Посещение kivy/app.py для получения дополнительной информации. Вернемся к вопросу: зачем мы это сделали?

введите описание изображения здесь

вот почему:

if __name__ == "__main__":
    app = MainApp()
    app.run()

с помощью функции App.run() мы запустили жизненный цикл приложения.

давайте перейдем к следующей строке:

from kivy.uix.gridlayout import GridLayout

Вы можете найти все вышесказанное по адресу: kivy/uix/gridlayout.py

введите описание изображения здесь

Для отображения виджета требуется столбец или строка. Как мне это сделать? Еще раз, мы можем посетить документацию для получения инструкций.

введите описание изображения здесь

Здесь говорится, что строки и cols представляют количество строк и столбцов соответственно в сетке, что приводит нас к причине, по которой мы сделали это в файле main.kv :

:
    rows: 1

Все в порядке? Давайте продолжим.

Что такое метод сборки и что он делает?

Сначала давайте пройдемся по kivy/app.py файл еще раз и посмотрите, что говорится в документации:

введите описание изображения здесь

Давайте сделаем то же самое для метода build :

введите описание изображения здесь

Теперь мы знаем причину этого:

class MainApp(App):

    def build(self):
        self.title = 'Awesome app!!!'
        return Container()

Надеюсь, к этому времени все немного прояснится. Однако у нас все еще есть проблема — где кнопки и ярлык? Что ж, давайте их построим.

Структурирование Вашего Приложения

Давайте создадим новую папку и файл buttons.kv в следующей структуре:

Структура

- kv
    - buttons.kv
- main.py
- main.kv

Кнопки

from kivy.uix.button import Button

class AddButton(Button):
    pass


class SubtractButton(Button):
    pass

Мы только что создали две кнопки (т. е. Добавить кнопку и Вычесть кнопку ), но мы не рассматривали их стили. Мы можем играть с их стилем через Python, но я предпочитаю делать стиль с .kv и логику с Python.

Давайте добавим что-нибудь в наш файл buttons.kv .

:
    text: "+1"

:
    text: "-1"

Прежде чем мы добавим что-то в класс контейнера (макет сетки), нам сначала нужно сказать Kivy, чтобы он читал из файла buttons.kv в папке kv.

Вот тут-то и появляется builder .

from kivy.lang import Builder
введите описание изображения здесь

Простой, но неэффективный способ работы с большими проектами-загрузить каждый файл .kv по отдельности.

Builder.load_file('./kv/buttons.kv')

Мы можем автоматизировать это:

from os import listdir 
kv_path = './kv/'
for kv in listdir(kv_path):
    Builder.load_file(kv_path+kv)

Добавьте как можно больше файлов .kv в папку kv, и они будут автоматически загружены построителем

Итак, мы здесь — мы определили кнопки и контейнер; однако на экране по-прежнему ничего нет. Давайте перейдем к добавлению кнопок (наконец)

Отредактируйте файл main.kv .

:
    display: display
    rows: 1
    BoxLayout:
        orientation: "vertical"
        AddButton:
            on_release: root.add_one()
        SubtractButton:
            on_release: root.subtract_one()
    Label:
        id: display
        font_size: dp(50)
        text: '0'

подождите…у нас есть еще одна проблема…

Что такое on_release и id?

on_release и on_press являются специальными методами, которые являются частью поведения кнопки (см. kivy | uix| behaviors/button//), тогда как id является свойством каждого виджета (см. kivy/uix/widget.py ).

введите описание изображения здесь

Прежде чем мы двинемся дальше, потратьте некоторое время на понимание “свойств” в Киви. Вот некоторые ресурсы, которые помогут прояснить ситуацию: Docs , stackoverflow и kivy-wiki .

введите описание изображения здесь

Свойство объекта

Следующий id будет использоваться для ObjectProperty для связи со стороной Python.

class Container(GridLayout):
    display = ObjectProperty()

    def add_one(self):
        value = int(self.display.text)
        self.display.text = str(value+1)

    def subtract_one(self):
        value = int(self.display.text)
        self.display.text = str(value-1)

Теперь у нас должно быть наше окончательное рабочее приложение.

Вы можете загрузить окончательное рабочее приложение с github .

Вы можете загрузить окончательное рабочее приложение с || github || .

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.button import Button
from kivy.properties import ObjectProperty
from kivy.uix.gridlayout import GridLayout


from os import listdir
kv_path = './kv/'
for kv in listdir(kv_path):
    Builder.load_file(kv_path+kv)


class AddButton(Button):
    pass


class SubtractButton(Button):
    pass


class Container(GridLayout):
    display = ObjectProperty()

    def add_one(self):
        value = int(self.display.text)
        self.display.text = str(value+1)

    def subtract_one(self):
        value = int(self.display.text)
        self.display.text = str(value-1)


class MainApp(App):
    def build(self):
        self.title = 'Awesome app!!!'
        return Container()


if __name__ == "__main__":
    app = MainApp()
    app.run()

Вы можете загрузить окончательное рабочее приложение с || github || .

:
    display: display
    rows: 1
    BoxLayout:
        orientation: "vertical"
        AddButton:
            on_release: root.add_one()
        SubtractButton:
            on_release: root.subtract_one()
    Label:
        id: display
        font_size: dp(50)
        text: '0'

кв/кнопки.кв

:
    text: "+1"
    font_size: 50

:
    text: "-1"
    font_size: 50

Вывод

Спасибо, что прочитали этот пост — надеюсь, вы нашли это полезным. Вы можете найти меня на GitHub , LinkedIn и CodeMentor . Если у вас есть какие-либо вопросы, не стесняйтесь обращаться ко мне! Больше сообщений:

  • Настройка навигационного ящика в Kivy & Kivy MD
  • Игрок: Независимый от платформы уровень совместимости
  • Управление текстурами в Киви с помощью атласа
  • Учебник для начинающих Kivy: Базовый ускоренный курс для приложений в Kivy
  • Redux, Магазин, Действия, Редукторы и регистратор: Начало работы и немного дальше (1)
  • Redux, Reactotron, Действия, Редукторы и Саги (2)