Kivy app – Phone Book with Cross-Platform Functionality

Posted by


Kivy – это открытый кросс-платформенный фреймворк для создания мультимедийных приложений, основанных на языке программирования Python. Он поддерживает несколько операционных систем, таких как Android, iOS, Windows, macOS и Linux. В этом руководстве мы создадим простое кросс-платформенное приложение для телефонной книги с помощью Kivy.

Шаг 1: Установка Kivy
Для начала вам нужно установить Kivy на свой компьютер. Для этого вам нужно выполнить следующие шаги:

  1. Установите Python на свой компьютер (если он еще не установлен). Можно загрузить Python с официального сайта python.org.

  2. Откройте командную строку и установите Kivy, запустив следующую команду:
pip install kivy
  1. Также необходимо установить 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. Надеюсь, это поможет вам начать работу с этим фреймворком и создать свое собственное крутое приложение!

0 0 votes
Article Rating
12 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@Alsurnov
2 months ago

Хороший урок. Сделай пожалуйста урок отображение БД с возможность редактирования каждой строки с помощью kivyMD.

@user-zh8ze4iw2n
2 months ago

И, кстати, в методе show_all() ничего не надо придумывать и переписывать, т.к. автор указал в search_by_name конструкция %name% , то можно просто указать пустую строку вот так – for contact in search_by_phone(''): и все работает.

@user-zh8ze4iw2n
2 months ago

В конце видео – несуразица. Автор говорит удаление телефона, пишет функцию 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-файл поменьше будет.

@user-zh8ze4iw2n
2 months ago

5 тысяч просмотров, в комментах все благодарят, а лайков 108 (с моим). Что-то я совсем не понимаю своих коллег, что, правда не понравилось или рука не поднимается или просто наплевать на автора и канал?

@Morfeus681
2 months ago

Можно еще вопросик!))
Написал "телефонную книгу" по Вашему видео. Запускается как под Windows, так и под Ubuntu… все гуд!
Создал apk файл используя Buildozer. Добавил в файл buildozer.spec, в секцию source.include_exts = py,png,jpg,kv,sqlite,atlas (расширение файла sqlite)
Файл создался, но установив приложение на телефон, оно запускается и вылетает.
Если не трудно, подскажите в чем может быть ошибка?
Заранее благодарен!

@Morfeus681
2 months ago

Подскажите, при добавлении MDToolBar выдает ошибку – kivy.factory.FactoryException: Unknown class <MDToolBar>. пробовал делать импорт import kivymd.uix.toolbar…. все равно ошибка

@user-xt7nc6bw3k
2 months ago

Очень подробное объяснение для тех, кто "с нуля". Все доступно и по полочкам! Огромная благодарность автору!!!

@angelscroll2336
2 months ago

Вопросик.Делаю все как у тебя но когда пишу MDToolbar в файле kv при запуске программы окошко появляется но сразу проподает.При этом ошибку не выдает.Убираю тулбар и всё работает.

@Zyablik.00l
2 months ago

Как то не очень смотрится, мне кажется react Native получше будет

@juginnorris2825
2 months ago

при нажатии поиск выдает такую ошибку File "kivyproperties.pyx", line 964, in kivy.properties.ObservableDict._getattr_

AttributeError: 'super' object has no attribute '__getattr__'

@pfk9025
2 months ago

Хороший разбор, спасибо! Порадовало использование алхимии) Много ценной информации. Желаю процветания каналу

@user-if1pj2kk2q
2 months ago

Отлично, великолепно ! Видео просто обязано набрать кучу просмотров…