Книга: Создание настольных Python приложений с графическим интерфейсом пользователя
Назад: Tkinter
Дальше: wxPython

Kivy



Kivy – это многоплатформенная среда разработки приложений для Python, которая позволяет разрабатывать приложения для Windows, Linux, Android, macOS, iOS и Raspberry Pi.







Kivy позволяет разрабатывать мобильные приложения с поддержкой мультитач и дает возможность создать приложение один раз и использовать его на всех устройствах.

Она также позволяет получать доступ к мобильным API-интерфейсам для управления такими вещами, как камера на телефоне, отслеживание GPS, вибратор и т. д.

Kivy включает в себя различные модули для воспроизведения видео файлов и потоков.

Kivy использует широкий спектр виджетов, поддерживающих мультитач и жесты.

Киви использует PyGame для простого создания игр.

И PyGame поставляется с различными модулями для рисования форм, работы с цветами и воспроизведения музыки.







Для разработки Киви приложения создадим проект в

PyCharm

и в окне терминала наберем команду установки Киви.







Далее мы можем запустить готовые примеры приложений Киви.







И мы можем сами теперь создавать Киви приложения.

Прежде всего мы должны импортировать kivy.

Теперь, чтобы создать интерфейс Kivy, нам нужно импортировать модуль приложения App.

Далее импортируем метку.

И определим класс с функцией, которая возвращает корневой виджет – метку.

Затем инициализируем класс и вызовем его метод run, запустив приложение Киви.

К метке мы также можем применить стиль, то есть увеличить текст, размер, цвет и многое другое.

Вы можете изменить стиль текста с помощью разметки текста Text Markup.







Упаковка Киви приложения в исполняемый файл для различных платформ достаточно сложная и не всегда обходится без сложностей и ошибок.

Подробные инструкции для упаковки приложения можно найти в документации.







Виджет TextInput предоставляет поле для редактирования простого текста.

Этот виджет поддерживает Unicode, multiline, курсорную навигацию, выделение и буфер обмена.

И TextInput использует две разные системы координат – (x, y) – координаты в пикселях, в основном используются для рендеринга на экране и (col, row) – индекс курсора в символах / строках, используемый для выделения и перемещения курсора.

Чтобы создать однострочный текстовый ввод, можно установить для свойства TextInput.multiline значение False.

Здесь параметр size_hint – это набор значений, используемых макетами для управления размерами своих дочерних элементов. Он указывает размер относительно размера макета, а не абсолютный размер в пикселях.

Если вы не хотите использовать size_hint для ширины или для высоты, установите значение параметра None.

В этом примере Scatter используется для создания интерактивных виджетов, которые можно поворачивать и масштабировать двумя или более пальцами на системе мультитач.

Компоновка BoxLayout размещает виджеты вертикально один над другим или горизонтально один за другим.

И методом bind мы связываем значения двух виджетов – метки и поля ввода.







Виджет CheckBox – это особая кнопка с двумя состояниями, которую можно установить или снять.

Если флажок находится в группе, он становится переключателем, в этом случае одновременно можно выбрать только одну кнопку.

Здесь мы для класса приложения устанавливаем два свойства active, с которыми связываем флажок и метку.

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

В результате при выборе флажка изменяется свойство active класса, которое связано с меткой.







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

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

При добавлении виджетов в список нам нужно указать высоту вручную (отключив size_hint_y), чтобы раскрывающийся список мог вычислить необходимую площадь.

И все кнопки в раскрывающемся списке будут запускать метод DropDown.select().

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

Здесь в этом примере мы создаем раскрывающийся список DropDown и добавляем в него кнопки методом add_widge.

При этом мы связываем с кнопками метод dropdown.select, передавая в него текст кнопки.

Далее мы создаем виджет – кнопку и связываем с ней метод dropdown.open.

Таким образом, при нажатии кнопки список раскрывается.

И в этом примере мы запускаем приложение с помощью метода runTouchApp.

Это статическая функция, запускающая цикл приложения.

Если вы передадите в runtouchApp виджет, будет создано окно, и виджет будет добавлен в это окно как корневой виджет.







Виджет ScrollView предоставляет прокручиваемое окно просмотра.

И ScrollView принимает только один дочерний элемент и применяет к нему прокрутку в соответствии со свойствами scroll_x и scroll_y.

По умолчанию ScrollView позволяет прокручивать по осям X и Y.

Вы можете явно отключить прокрутку по оси, установив для свойств do_scroll_x или do_scroll_y значение False.

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

По умолчанию size_hint равен (1, 1), поэтому размер содержимого точно соответствует вашему ScrollView и вам нечего будет прокручивать.

Вы должны деактивировать хотя бы одну из инструкций size_hint (x или y) дочернего элемента, чтобы включить прокрутку.

Здесь, чтобы прокрутить GridLayout по оси Y по вертикали, установим ширину дочернего элемента равной ширине ScrollView (size_hint_x = 1) и установим для свойства size_hint_y значение None.

Здесь мы также используем класс Window – базовый класс для создания окна Kivy по умолчанию.

Мы используем свойство clearcolor, чтобы установить фон окна и свойство size, чтобы установить размер окна.

Для метки мы используем параметр color, чтобы установить цвет текста.







Виджет «Карусель» представляет собой классический удобный для мобильных устройств вид карусели, в котором можно перемещаться между слайдами.

Вы можете добавить любой контент в карусель и заставить его перемещаться по горизонтали или вертикали.

Этот виджет может содержать изображения, видео или любой другой контент.

Здесь мы асинхронно загружаем изображения в карусель и используем класс Clock, чтобы автоматически перемещаться между слайдами.







Компоновка BoxLayout упорядочивает виджеты либо вертикально, либо горизонтально.

Ориентацию компоновки определяет параметр orientation.

И если вы не укажете размер, тогда дочерние виджеты делят размер своего родительского виджета поровну.

Если указать параметр size_hint, он будет использовать доступное пространство после вычитания всех виджетов фиксированного размера.







Виджет Slider используется для увеличения яркости, громкости и т. д.

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

Здесь параметр value_track определяет, должен ли ползунок рисовать линию между значением min и значением ползунка.

Параметр value_track_color определяет цвет этой линии в формате rgba.

И методом bind мы связываем со значением ползунка функцию on_value, в которой мы изменяем текст метки.







Виджет Popup используется для создания всплывающих окон.

По умолчанию всплывающее окно покрывает все «родительское» окно.

Когда вы создаете всплывающее окно, вы должны как минимум установить Popup.title и Popup.content.

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

Всплывающее окно Popup – это особый виджет.

Не пытайтесь добавить его как дочерний элемент к любому другому виджету.

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

Если вы не хотите, чтобы всплывающее окно отображалось в полноэкранном режиме, вы должны либо указать size_hint со значениями меньше 1 (например, size_hint = (. 8, .8)), либо отключить size_hint и использовать атрибуты фиксированного размера.

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

Если вы этого не хотите, вы можете установить параметр auto_dismiss как False.

Чтобы вручную закрыть всплывающее окно, можно использовать команду dismiss.







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

И пользователь может провести пальцем влево или вправо, чтобы активировать или деактивировать переключатель.

Значение, выдаваемое переключателем – это True или False.

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

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







Spinner – это виджет, который позволяет быстро выбрать одно значение из предопределенного набора значений.

В состоянии по умолчанию спиннер показывает текущее выбранное значение.

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

И к спиннеру методом bind может быть прикреплен обратный вызов для получения уведомлений о выборе значения пользователем.







Виджет ProgressBar используется для визуализации прогресса долго выполняющейся задачи.

В настоящее время поддерживается только горизонтальный режим.

Индикатор выполнения не имеет интерактивных элементов и является виджетом только для отображения прогресса выполнения.

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







Виджет Bubble – это меню или небольшое всплывающее окно, в котором пункты меню расположены вертикально или горизонтально.

И этот виджет содержит стрелку, указывающую в выбранном направлении.

Чтобы выбрать направление стрелки, используется параметр arrow_pos виджета.

Ориентация виджета по умолчанию горизонтальная, но вы можете изменить ее с помощью параметра orientation.

Чтобы добавить элементы в виджет, используется метод add_widget.







Виджет TabbedPanel предоставляет вкладки, с областью заголовка для кнопок вкладок и областью содержимого для отображения содержимого текущей вкладки.

И TabbedPanel предоставляет одну вкладку по умолчанию, которую можно отключить параметром do_default_tab.

Отдельная вкладка называется TabbedPanelHeader.

Это специальная кнопка, содержащая контент.

Сначала вы добавляете TabbedPanelHeader, а затем устанавливаете ее содержимое.

Этим контентом может быть любой виджет.

Это может быть компоновка с иерархией виджетов или отдельный виджет, например метка или кнопка.







Виджет

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

Дочерние элементы виджета располагаются также как и в RelativeLayout.

Таким образом, при перетаскивании Scatter положение дочерних элементов не меняется, изменяется только положение Scatter.

И размер Scatter не влияет на размер его дочерних элементов.

Если вы хотите изменить размер Scatter, используйте scale, а не size .

Параметр scale трансформирует как Scatter, так и его дочерние элементы.

И Scatter – это не компоновка. Вы сами должны управлять размером дочерних виджетов.

По умолчанию Scatter не имеет графического представления – это только контейнер.

Идея состоит в том, чтобы объединить Scatter с другим виджетом, например с изображением или иерархией виджетов.







Классы Animation и AnimationTransition используются для анимации свойств виджета.

И вы должны указать имя свойства и целевое значение.

Чтобы использовать анимацию, нужно создать объект Animation и далее нужно использовать объект Animation в виджете.

Здесь мы создаем объект анимации.

Этот объект можно сохранить и повторно использовать в разных виджетах.

Здесь + – это последовательный шаг, а & – параллельный шаг.

Далее мы применяем анимацию к кнопке, переданную в аргументе "instance".







Компоновка Floatlayout позволяет размещать элементы относительно друг друга в зависимости от текущего размера и высоты окна.

То есть Floatlayout позволяет размещать элементы, используя так называемое относительное положение.

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

И когда мы изменяем размеры окна, все, что помещается в окне, соответственно изменяет свой размер и положение.

Это делает приложение более надежным и масштабируемым в соответствии с размером окна.

При использовании FloatLayout мы используем свойства pos_hint и size_hint дочерних элементов.

По умолчанию все виджеты имеют свой size_hint = (1, 1).

Чтобы создать кнопку с шириной 50% и 25% от высоты компоновки и расположенную в точке (20, 20), мы определяем size_hint=(.5, .25) и pos=(20, 20).

Чтобы создать кнопку, нижний левый угол которой будет находиться минус 20% с каждой стороны, мы определяем pos_hint={'x':.2, 'y':.2}.







Gridlayout – это компоновка, которая упорядочивает дочерние элементы в матричном формате.

Она берет доступное пространство (квадрат) и делит это пространство на строки и столбцы, а затем добавляет виджеты в соответствии с полученными ячейками.

Здесь мы не можем явно разместить виджет в определенном столбце / строке.

Каждому дочернему элементу автоматически назначается определенная позиция.

И для этой компоновки нужно указать как минимум количество столбцов или строк.

Если мы не укажем столбцы или строки, программа выдаст исключение.

Первоначальный размер компоновки задается свойствами col_default_width и row_default_height.

Мы можем установить размер по умолчанию, используя свойство col_force_default или row_force_default.

Это заставит макет игнорировать размеры дочерних элементов и использовать размер по умолчанию компоновки.

Чтобы настроить размер одного столбца или строки, используйте cols_minimum или rows_minimum.







Компоновки StackLayout и Boxlayout очень похожи.

И здесь и там можно упорядочивать виджеты вертикально или горизонтально.

Но с помощью StackLayout вы можете комбинировать ориентации.

Имеется 4 ориентации по строкам и 4 по столбцам, это справа налево или слева направо, сверху вниз или снизу вверх.







Компоновка AnchorLayout размещает свои дочерние элементы по границе контейнера (сверху, снизу, слева, справа) или по центру.

AnchorLayout можно инициализировать с помощью параметров:

anchor_x и anchor_y – могут быть переданы значения «слева», «справа» и «по центру».

Таким образом, здесь для выбора места размещения виджетов в родительском контейнере, есть 9 различных областей компоновки, верхний левый, верхний центр, верхний правый, центральный левый, центральный, центральный правый, нижний левый, нижний центральный и нижний правый.







Компоновка Relativelayout похожа на компоновку FloatLayout, разница в том, что дочерние виджеты компоновки Relativelayout располагаются относительно компоновки, а не относительно окна.

Эта компоновка работает так же, как FloatLayout, но свойства позиционирования (x, y, center_x, right, y, center_y и top) относятся к размеру компоновки, а не к размеру окна.

И дочерние виджеты перемещаются при изменении положения компоновки.

То есть координаты дочернего виджета остаются такими же, так как они всегда определяются относительно родительской компоновки.

И параметры pos_hint – x, center_x, right, y, center_y и top используются для выравнивания виджета по краям или центрирования независимо от размера окна.

Таким образом, эта компоновка позволяет устанавливать относительные координаты для дочерних виджетов.

Если вам нужно абсолютное позиционирование, используйте FloatLayout.

И в RelativeLayout необходимо указать размер и положение каждого дочернего виджета.







Компоновка PageLayout работает иначе, чем другие макеты.

Эта компоновка позволяет перелистывать страницы, используя свои границы.

Идея состоит в том, что все страницы сложены друг над другом, и мы видим ту страницу, которая находится сверху.

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

Назад: Tkinter
Дальше: wxPython