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)