Баннер мобильный (3) Пройти тест

Как быстро написать приложение на Python

Kivy — в помощь

Инструкция

25 марта 2025

Поделиться

Скопировано
Как быстро написать приложение на Python

Содержание

    Создание мобильных и десктопных приложений на Python — задача, с которой можно справиться быстро и без глубокого погружения в разработку интерфейсов. В этом помогут библиотеки Kivy и KivyMD, позволяющие писать кроссплатформенные приложения с удобным и современным дизайном.

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

    Что такое Kivy и как его установить?

    Для создания приложений с графическим интерфейсом существует множество фреймворков. Если говорить о Python, то для разработки графических приложений можно использовать такие библиотеки, как PySimpleGUI, Tkinter, PyQt и другие. Они позволяют относительно просто создавать интерфейсы.  

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

    Прежде чем начать использовать Kivy, его необходимо установить. Самый простой способ — воспользоваться пакетным менеджером PIP, который работает одинаково во всех системах. Чтобы проверить, установлен ли он у вас, выполните в терминале следующую команду:

    pip --version

    Если PIP установлен, вы увидите примерно такой вывод:

    pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

    Если же команда не возвращает подобный результат, вам потребуется установить PIP, следуя официальной инструкции.

    После успешной установки PIP можно переходить к установке Kivy. Для этого выполните команду:

    pip install kivy

    После нажатия клавиши Enter вы можете получить такое сообщение:

    Инструкция

    Это сообщение указывает на отсутствие виртуального окружения для Python. Чтобы его создать, выполните следующую команду:

    python -m venv venv

    Теперь нужно ее активировать. Для Linux и MacOS это делается так:

    source venv/bin/activate

    А для Windows такую:

    venv\Scripts\activate.bat

    Теперь, когда среда активирована, можно устанавливать Kivy:

    pip install kivy

    Для деактивации виртуального окружения вводим следующую команду:

    deactivate

    Теперь можно переходить к средствам разработки.

    Настраиваем среду разработки

    Для разработки на Python существует множество IDE. Одна из самых популярных — PyCharm Community Edition от компании JetBrains.

    Еще один широко используемый инструмент — Visual Studio Code от Microsoft, скачать его можно здесь. В отличие от PyCharm, которая сразу готова к работе, Visual Studio Code требует небольшой настройки — установки необходимых расширений.

    Мы рекомендуем использовать именно VS Code, так как он универсален и подходит не только для Python-проектов. Благодаря расширениям в нем можно писать код практически на любом языке. PyCharm же ориентирована исключительно на разработку на Python.

    Запустите редактор и перейдите в раздел расширений (иконка на боковой панели). В строке поиска введите python, затем выберите расширение Python от Microsoft. Оно должно выглядеть так:

    создание приложения на Python

    Вместе с этим расширением автоматически установятся еще два: Python Debugger и Pylance. Дополнительно можно установить Russian Language Pack, если требуется русификация интерфейса редактора.

    В результате раздел расширений будет выглядеть примерно так:

    как создать приложения Python

    Теперь необходимо настроить интерпретатор Python.

    1. Откройте меню «Вид» и выберите «Палитра команд».
    2. В появившемся окне найдите и выберите «Python: Выбор интерпретатора».
    3. В следующем окне выберите недавно созданное виртуальное окружение.

    При создании виртуального окружения в домашнем каталоге должна была появиться папка venv. Внутри нее находится папка bin, а в ней — файл python3. Именно его путь нужно указать в качестве интерпретатора.

    После этого всё готово к написанию кода!

    Приложение № 1: экран приветствия

    Для начала необходимо создать папку с названием hello-app-kivy или любым другим, которое выражает суть приложения. В этой папке будут храниться файлы с исходным кодом и одно изображение. Файлы с исходниками — это файл с расширением .py и файл с расширением .kv, в котором описывается интерфейс приложения на языке Kv Design Language. Само приложение выглядит следующим образом:

    экран приветствия

    А вот так это выглядит в файле KV:

    <HelloWidget>:
        orientation: 'vertical'
        padding: 20
        spacing: 20
    
        name_input: name
        hello_label: hello
    
        Image:
            source: 'hello.png'
    
        Label:
            id: hello
            font_size: 30
            text: 'Введите ваше имя'   
    
        TextInput:
            id: name
            multiline: False
            size_hint: (.5, None)
            pos_hint:{"center_x":0.5, "top":1}
            height: 50
            font_size: 30
    
        Button:
            font_size: 30
            text: 'Поприветствовать'
            size_hint: (.5, None)
            pos_hint:{"center_x":0.5, "top":1}
            background_color: 'green'
            on_press: root.say_hello()

    Рассмотрим этот файл подробнее. Мы видим четыре компонента расположенные один под другим по вертикали и упакованные в некий HelloWidget. Чуть позднее будет понятно, что это за виджет такой, когда мы перейдем к рассмотрению python-кода. Компонент Image — это изображение. Сразу же после двоеточия и после отступа указано его местоположение при помощи свойства source. Label — это текстовая метка. Для нее указан идентификатор, размер шрифта и, собственно, сам текст. Далее идет TextInput. Это поле для ввода какой-либо информации. Заключительным компонентом является обычная кнопка Button. Последним свойством (on_press) указана функция, которая должна выполняться при нажатии на эту кнопку.

    Теперь рассмотрим python-код этого приложения:

    from kivy.app import App
    from kivy.uix.boxlayout import BoxLayout
    from kivy.properties import ObjectProperty
    
    
    class HelloWidget(BoxLayout):
        hello_label = ObjectProperty()
        name_input = ObjectProperty()
    
        def say_hello(self):
            if self.name_input.text == "":
               self.hello_label.text = 'Привет!'
            else:
               self.hello_label.text = 'Привет, ' + self.name_input.text + "!"
    
    
    class HelloApp(App):
    
        def build(self):
            return HelloWidget()
    
    
    if __name__ == '__main__':
        app = HelloApp()
        app.run()

    Обратим внимание на класс HelloWidget. В его параметрах указан BoxLayout — это контейнер, в который упакованы все компоненты интерфейса приложения.

    В этом классе определены два компонента, к которым обращается код:

    • hello_label — текстовая метка,
    • name_input — поле для ввода.

    Оба объекта объявлены через ObjectProperty. Также в классе присутствует функция say_hello, которая выводит приветствие при нажатии на кнопку.

    Запуск приложения осуществляется через класс HelloApp, содержащий единственную функцию build, возвращающую HelloWidget.

    Чтобы запустить приложение в VS Code, нажмите на треугольник (кнопку запуска) справа от группы вкладок с открытыми файлами. После запуска введите имя в поле и нажмите кнопку приветствия. Должно получиться следующее:

    кнопка приветствия

    Если оставить поле пустым и нажать на кнопку, то получим это:

    действие при нажатии кнопки

    Значит все работает как надо! Перейдем к созданию следующего приложения.

    Приложение № 2: простой калькулятор на KivyMD

    KivyMD — это библиотека, содержащая компоненты в стиле Material Design. С ее помощью можно разрабатывать мобильные приложения для Android на языке Python, которые внешне не будут отличаться от нативных, созданных на Java или Kotlin.

    Давайте напишем простой калькулятор на KivyMD. Он будет принимать два числа, введенные в отдельные поля, и выводить их сумму, разность, произведение и частное.

    Сначала активируем виртуальное окружение Python, как было показано ранее. После этого выполняем команду:

    pip install kivymd

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

    калькулятор на Python

    Файл с описанием интерфейса (kv-файл) имеет следующее содержимое:

    BoxLayout:
    	orientation:"vertical"
    	spacing:10
    	padding:10
    	
    	ActionBar:
    		background_color:.1, 4, .2, .9
    
    		ActionView:
    		    padding:5
    		    ActionPrevious:
    		        title:"Калькулятор"
    		        with_previous:False
    		        app_icon:''
    		        	
    		        Button:
    		        	text:"Очистить"
    		        	on_release:
    		        		app.clear(num1,num2,result)
    
    	MDTextField:
                    id: num1
                    multiline: False
                    size_hint: (.5, None)
                    pos_hint:{"center_x":0.5, "top":1}
                    height: 50
                    font_size: 30
    
    	MDTextField:
                    id: num2
                    multiline: False
                    size_hint: (.5, None)
                    pos_hint:{"center_x":0.5, "top":1}
                    height: 50
                    font_size: 30
    	
    		
    	MDLabel:
    	    id:result
    	    text:""
    	    theme_text_color:"Custom"
    	    bold:True
    	    halign:"center"
    	    font_style:"H6"
    
    	MDRaisedButton:
    	    text:"Вычислить"
    	    pos_hint: {"center_x": .5, "center_y": .5}
    	    background_color:(0,0,1,1)
    	    on_release:
    	          app.calculate(num1,num2,result)
    
    

    Рассмотрим его более подробно. Здесь также как и в прошлом примере все компоненты упакованы в BoxLayout с вертикальной ориентацией. В самой верхней части окна расположен ActionBar. В нем содержится компонент ActionView, который в свою очередь содержит компонент ActionPrevious отображающий название приложения. В нем же расположена кнопка Button, на которую навешена функция очистки полей ввода и области вывода результатов.

    Далее идут все остальные компоненты. Два текстовых поля MDTextField предназначенные для ввода чисел, текстовая метка MDLabel, в которой выводятся результаты вычислений и кнопка MDRaisedButton запускающая эти самые вычисления.

    Теперь рассмотрим python-код калькулятора:

    from kivymd.app import MDApp
    from kivymd.toast import toast
    from kivy.lang import Builder
    from kivy.core.window import Window
    
    Window.size = (300,600)
    
    class CalculatorApp(MDApp):
    
    	def build(self):
    		bldr = Builder.load_file("calculator.kv")
    		return bldr
    	
    	def addition(self, a, b):
    		return a + b
    	
    	def subtraction(self, a, b):
    		return a - b
    	
    	def multiplication(self, a, b):
    		return a * b
    	
    	def division(self, a, b):
    		return a / b
    		
    	def calculate(self,num1,num2,result):
    		if num1.text == '' or num2.text == '':
    			toast('Введите числа!')
    			return
    		
    		a = float(num1.text)
    		b = float(num2.text)
    		
    		result_addition = str(self.addition(a, b))
    		result_subtraction = str(self.subtraction(a, b))
    		result_multiplication = str(self.multiplication(a, b))
    	    
    		if b == 0:
    			result_division = 'На ноль делить нельзя!'
    		else:
    			result_division = str(self.division(a, b))
    		   
    		result.text = "Сумма: "+result_addition+"\nРазность: "+result_subtraction+"\nПроизведение: "+result_multiplication+"\nЧастное: "+result_division
    	
    	def clear(self,num1,num2,result):
    		num1.text = ""
    		num2.text = ""
    		result.text = ""
    
    CalculatorApp().run()
    
    

    В начале кода можно заметить несколько импортов. Помимо KivyMD, здесь используется стандартная библиотека Kivy, из которой импортируются Builder для загрузки интерфейса и Window. Интерфейс приложения загружается в функции build(), а сразу после нее идут четыре функции, выполняющие основные арифметические операции.

    Ключевую роль в вычислениях играет функция calculate(). Сначала она проверяет, заполнены ли оба поля ввода. Если одно из них пустое, появляется всплывающее сообщение с предупреждением. Затем создаются переменные a и b, которым присваиваются числовые значения из полей. После этого вызываются вычислительные функции, их результаты преобразуются в строки и используются для формирования итогового вывода. Также предусмотрена обработка случая, когда второе число равно нулю — в этом случае вместо результата деления отображается сообщение «На ноль делить нельзя».

    Вот так это выглядит:

    результат

    Последняя функция с именем clear очищает оба поля и область вывода результатов. Далее рассмотрим пример приложения с чуть более сложным интерфейсом.

    Приложение № 3: счетчик нажатий на KivyMD

    Это простое приложение считает нажатия на кнопки как в положительную, так и в отрицательную сторону. Вот так оно выглядит:

    приложение на Python

    Посмотрим на его файл KV:

    BoxLayout:
    	orientation:"vertical"
    	
    	ActionBar:
    		
    		ActionView:
    		    padding:5
    		    ActionPrevious:
    		        title:"COUNTER APP"
    		        with_previous:False
    		        app_icon:''
    		        	
    		        Button:
    		        	text:"Clear"
    		        	on_release:
    		        		app.clear(count,red,green)
    		
    	BoxLayout:
    	    orientation:"horizontal"
    		padding:20
    
    	    MDLabel:
    		    id:green
    		    text:""
    		    theme_text_color:"Custom"
    		    md_bg_color: "green"
    		    text_color:"white"
    		    bold:True
    		    halign:"center"
    		    font_style:"H6"
    	
    	    MDLabel:
    		    id:count
    		    text:"0"
    		    halign:"center"
    		    font_style:"H1"
    		    text_color:"black"
    		    theme_text_color: "Custom"
                               md_bg_color: (1,1,1,1)
    		
    	    MDLabel:
    		    id:red
    		    text:""
    		    text_color:"white"
    		    bold:True
    		    halign:"center"
    		    font_style:"H6"
    		    theme_text_color:"Custom"
                               md_bg_color: "red"
    		
    	BoxLayout:
    		orientation:"horizontal"
    		padding:20
    		spacing:20
    
    		MDRaisedButton:
    			text:"+"
    			bold:True
    			font_style:"H3"
    			size_hint:(.3,.7)
    			background_color:(0,0,1,1)
    			on_release:
    				app.plus(count)
    				app.set_text(count,red,green)
    				
    		MDRaisedButton:
    			text:"-"
    			bold:True
    			font_style:"H3"
    			size_hint:(.3,.7)
    			background_color:(0,0,1,1)
    			on_release:
    				app.minus(count)
    				app.set_text(count,red,green)
    
    

    Что мы здесь видим? А видим мы здесь главный контейнер BoxLayout с вертикальной ориентацией, в который вложены ActionBar и два BoxLayout с горизонтальной ориентацией. Один из них содержит три текстовые метки MDLabel, а другой две кнопки MDRaisedButton. На каждую из этих кнопок навешены по две функции. Их мы рассмотрим немного позже. Теперь взглянем на python-код этого приложения:

    from kivymd.app import MDApp
    from kivy.lang import Builder
    from kivy.core.window import Window
    
    #Function to fix the window size
    Window.size = (600,300)
    
    class CounterApp(MDApp):
    	def build(self):
    		bldr = Builder.load_file("counter.kv")
    		return bldr
    		
    	def plus(self,count):
    		a=int(count.text)
    		a=a+1
    		count.text= str(a)
    		
    	def minus(self,count):
    		a=int(count.text)
    		a=a-1
    		count.text= str(a)
    		
    	def set_text(self,count,red,green):
    		x=int(count.text)
    		if x>0:
    			green.text="POSITIVE"
    		elif x<0:
    			red.text="NEGATIVE"
    		else:
    			red.text=""
    			green.text=""
    			
    	def clear(self,count,red,green):
    			z= int(count.text)
    			if z!=0:
    				count.text="0"
    				green.text=""
    				red.text=""
    			
    		
    
    CounterApp().run()

    Как и в предыдущем примере, функция build() отвечает за загрузку файла с разметкой интерфейса. Далее идут две функции, которые увеличивают или уменьшают значение счетчика на единицу и обновляют отображение результата в центральной текстовой метке. Затем следует функция set_text(), которая определяет, какой текст должен отображаться в крайних метках в зависимости от текущего значения счетчика. Если счетчик больше нуля, в зеленой метке появляется слово POSITIVE, если меньше нуля — в красной метке отображается NEGATIVE, а при нулевом значении текст в обеих метках исчезает.

    Завершает логику функция clear(), которая сбрасывает состояние приложения: цветные метки очищаются, а в центральной метке устанавливается ноль. Ранее был показан скриншот приложения сразу после вызова этой функции или в момент запуска. А вот так оно выглядит после нескольких нажатий на кнопки:

    результат

    Еще пример:

    итог

    Как видим, в разработке приложений на Kivy и KivyMD нет ничего особо сложного. Ниже приводим несколько полезных ссылок, которые могут помочь начинающим разработчикам.

    Полезные ссылки

    Инструкция

    Поделиться

    Скопировано
    0 комментариев
    Комментарии