Kivy – это открытый кросс-платформенный фреймворк для создания мультимедийных приложений, основанных на языке программирования Python. Он поддерживает несколько операционных систем, таких как Android, iOS, Windows, macOS и Linux. В этом руководстве мы создадим простое кросс-платформенное приложение для телефонной книги с помощью Kivy.
Шаг 1: Установка Kivy
Для начала вам нужно установить Kivy на свой компьютер. Для этого вам нужно выполнить следующие шаги:
-
Установите Python на свой компьютер (если он еще не установлен). Можно загрузить Python с официального сайта python.org.
- Откройте командную строку и установите Kivy, запустив следующую команду:
pip install kivy
- Также необходимо установить Kivy Examples для использования готовых шаблонов. Для этого выполните следующую команду:
pip install kivy_examples
Шаг 2: Создание проекта
Теперь создадим новый проект для нашего приложения телефонной книги. Создайте новую папку для проекта и перейдите в нее:
mkdir PhoneBookApp
cd PhoneBookApp
Создайте новый файл main.py, который будет содержать код для вашего приложения:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
class PhoneBookApp(App):
def build(self):
layout = BoxLayout(orientation='vertical')
return layout
if __name__ == '__main__':
PhoneBookApp().run()
Шаг 3: Добавление интерфейса
Теперь добавим интерфейс для нашего приложения. Мы будем использовать различные виджеты Kivy, такие как TextInput, Button и Label. Вот пример кода для интерфейса:
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.label import Label
class PhoneBookApp(App):
def build(self):
layout = BoxLayout(orientation='vertical')
self.input_name = TextInput(hint_text='Enter Name')
self.input_phone = TextInput(hint_text='Enter Phone Number')
self.btn_add = Button(text='Add Contact', on_press=self.add_contact)
self.lbl_contacts = Label(text='Contacts:')
layout.add_widget(self.input_name)
layout.add_widget(self.input_phone)
layout.add_widget(self.btn_add)
layout.add_widget(self.lbl_contacts)
return layout
def add_contact(self, instance):
name = self.input_name.text
phone = self.input_phone.text
self.lbl_contacts.text += f'n{name}: {phone}'
if __name__ == '__main__':
PhoneBookApp().run()
Шаг 4: Запуск приложения
Теперь можно запустить наше приложение. Откройте командную строку, перейдите в папку проекта и выполните следующую команду:
python main.py
После этого приложение должно открыться и вы увидите окно с интерфейсом телефонной книги. Вы можете вводить имя и номер телефона контакта, нажимать кнопку "Add Contact" и увидеть их список ниже.
Шаг 5: Доработка приложения
Дальше можно улучшить наше приложение, добавив функционал поиска, удаления и редактирования контактов. Можно также добавить сортировку контактов по алфавиту или номеру телефона. В Kivy есть множество виджетов и функций, которые помогут вам реализовать все необходимые возможности.
Это было краткое руководство по созданию кросс-платформенного приложения для телефонной книги с помощью Kivy. Надеюсь, это поможет вам начать работу с этим фреймворком и создать свое собственное крутое приложение!
Хороший урок. Сделай пожалуйста урок отображение БД с возможность редактирования каждой строки с помощью kivyMD.
И, кстати, в методе show_all() ничего не надо придумывать и переписывать, т.к. автор указал в search_by_name конструкция %name% , то можно просто указать пустую строку вот так – for contact in search_by_phone(''): и все работает.
В конце видео – несуразица. Автор говорит удаление телефона, пишет функцию delete_phone, а удаляет сам Контакт!!! По ходу просмотра я еще думал, а как автор будет выбирать телефон к удалению, ведь их несколько, а автор просто грохнул самого Контакта и даже не поинтересовался, что стало с телефонами. А на самом деле – телефоны повисли в БД без контакта, т.е. стали мусором. Если бы автор указал в relationship хотя бы cascade=merge то и телефоны удалились бы. А так получилась ложка дегтя в бочку меда.
С user_id можно не заморачиваться, если справочник вести правильно и не допускать дубликатов контактов (а это можно прямо указать unicue=True в свойствах поля name у User. В таком случае, можно в KV-файле указать app.delete_phone(root.text, root.secondary_text), передавая таким образом Имя (уникальное) и строку с телефонами. А дальше уже найти по полному соответствию filter(nane = name) и получить user_id, который, уже реально нужен для удаления именно телефона. Только его надо как-то еще и выбрать из списка телефонов, полученным вторым параметром. Вот этого и не хватает в этом хорошем видео. Кроме того в delete_phone , по хорошему, надо проверять кол-во телефонов у контакта, если телефон 1, то можно и контакта удалить вместе с телефоном, а вот если телефонов больше 1, то надо именно телефон удалить по user_id и phone, а самого клиента не трогать. Соответственно в этом случае, для обновления информации на экране надо просто переписать свойство secondary_text.
Кроме того, мне кажется, что выбор автором библиотеки Alchemy приведет к увеличению размера apk-файла, так, что если кто-то смотрел, как и я, для мобильной разработки, то рекомендую использовать именно "сырые" запросы через библиотеку sqlite3. имхо, dpk-файл поменьше будет.
5 тысяч просмотров, в комментах все благодарят, а лайков 108 (с моим). Что-то я совсем не понимаю своих коллег, что, правда не понравилось или рука не поднимается или просто наплевать на автора и канал?
Можно еще вопросик!))
Написал "телефонную книгу" по Вашему видео. Запускается как под Windows, так и под Ubuntu… все гуд!
Создал apk файл используя Buildozer. Добавил в файл buildozer.spec, в секцию source.include_exts = py,png,jpg,kv,sqlite,atlas (расширение файла sqlite)
Файл создался, но установив приложение на телефон, оно запускается и вылетает.
Если не трудно, подскажите в чем может быть ошибка?
Заранее благодарен!
Подскажите, при добавлении MDToolBar выдает ошибку – kivy.factory.FactoryException: Unknown class <MDToolBar>. пробовал делать импорт import kivymd.uix.toolbar…. все равно ошибка
Очень подробное объяснение для тех, кто "с нуля". Все доступно и по полочкам! Огромная благодарность автору!!!
Вопросик.Делаю все как у тебя но когда пишу MDToolbar в файле kv при запуске программы окошко появляется но сразу проподает.При этом ошибку не выдает.Убираю тулбар и всё работает.
Как то не очень смотрится, мне кажется react Native получше будет
при нажатии поиск выдает такую ошибку File "kivyproperties.pyx", line 964, in kivy.properties.ObservableDict._getattr_
AttributeError: 'super' object has no attribute '__getattr__'
Хороший разбор, спасибо! Порадовало использование алхимии) Много ценной информации. Желаю процветания каналу
Отлично, великолепно ! Видео просто обязано набрать кучу просмотров…