Найти в Дзене
Katsysiro

Создание мобильного приложения с Kivy Python Framework. Часть 3

Оглавление

Это продолжение, остальные статьи:

Макет пользовательского интерфейса

Каждая используемая вами структура графического интерфейса имеет собственный метод размещения виджетов. Например, в wxPython вы будете использовать sizers, а в Tkinter вы используете менеджер макетов или геометрии. С Kivy вы будете использовать макеты . Есть несколько различных типов макетов, которые вы можете использовать. Вот некоторые из наиболее распространенных:

  • BoxLayout
  • FloatLayout
  • GridLayout

Вы можете найти в документации Kivy полный список доступных макетов. Вы также можете посмотреть исходный код kivy.uix.

Попробуйте BoxLayout с этим кодом:

import kivy
import random
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
red = [1,0,0,1]
green = [0,1,0,1]
blue = [0,0,1,1]
purple = [1,0,1,1]
class HBoxLayoutExample(App):
def build(self):
layout = BoxLayout(padding=10)
colors = [red, green, blue, purple]
for i in range(5):
btn = Button(text="Button #%s" % (i+1),
background_color=random.choice(colors)
)
layout.add_widget(btn)
return layout
if __name__ == "__main__":
app = HBoxLayoutExample()
app.run()

Здесь вы импортировать BoxLayout из kivy.uix.boxlayout и создать его экземпляр. Затем вы создаете список цветов, которые сами являются списками красно-сине-зеленых (RGB). Наконец, вы перебираете range 5, создавая кнопку btn для каждой итерации. Чтобы сделать вещи немного веселее, вы устанавливаете background_color кнопку в случайный цвет. Затем вы добавляете кнопку в свой макет с помощью layout.add_widget(btn).

Когда вы запустите этот код, вы увидите что-то вроде этого:

-2

Есть 5 кнопок разного цвета, по одной на каждую итерацию цикла.

Когда вы создаете макет, есть несколько аргументов, которые вы должны знать:

  • padding: Вы можете указать padding в пикселях между макетом и его дочерними элементами одним из трех способов:
  1. Список четыре-аргумента: [ padding_left, padding_top, padding_right, padding_bottom]
  2. Список с двумя аргументами: [ padding_horizontal, padding_vertical]
  3. Единственный аргумент: padding=10
  • spacing: Вы можете добавить пробел между дочерними виджетами с этим аргументом.
  • orientation: Вы можете изменить значение orientation по умолчанию BoxLayout с горизонтального на вертикальное.

Добавление событий

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

Kivy также имеет концепцию Properties, которая работает с EventDispatcher. Свойства помогут вам сделать проверки. Они также позволяют запускать события всякий раз, когда виджет меняет свой размер или положение.

Давайте добавим событие кнопки к вашему коду кнопки ранее:

import kivy
import random

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

red = [1,0,0,1]
green = [0,1,0,1]
blue = [0,0,1,1]
purple = [1,0,1,1]

class HBoxLayoutExample(App):
def build(self):
        layout = BoxLayout(padding=10)
        colors = [red, green, blue, purple]

for i in range(5):
            btn = Button(text="Привет Дзен #%s" % (i+1), 
background_color=random.choice(colors)
            )
            btn.bind(on_press=self.on_press_button)

            layout.add_widget(btn)
return layout

def on_press_button(self, instance):
print('Вы нажали на кнопку!')

if __name__ == "__main__":
    app = HBoxLayoutExample()
    app.run()

В этом коде вы вызываете btn .bind() и связываете on_press событие с MainApp.on_press_button(). Этот метод неявно принимает виджет instance, который является button самим объектом. Наконец, сообщение будет напечатано в консоль всякий раз, когда пользователь нажимает вашу кнопку.

-3

Продолжение следует.

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