Это продолжение, остальные статьи:
- Макет пользовательского интерфейса и Добавление событий
Макет пользовательского интерфейса
Каждая используемая вами структура графического интерфейса имеет собственный метод размещения виджетов. Например, в 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).
Когда вы запустите этот код, вы увидите что-то вроде этого:
Есть 5 кнопок разного цвета, по одной на каждую итерацию цикла.
Когда вы создаете макет, есть несколько аргументов, которые вы должны знать:
- padding: Вы можете указать padding в пикселях между макетом и его дочерними элементами одним из трех способов:
- Список четыре-аргумента: [ padding_left, padding_top, padding_right, padding_bottom]
- Список с двумя аргументами: [ padding_horizontal, padding_vertical]
- Единственный аргумент: 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 самим объектом. Наконец, сообщение будет напечатано в консоль всякий раз, когда пользователь нажимает вашу кнопку.
Продолжение следует.
Если вам понравилось подписывайтесь на канал, ставьте лайки, комментируйте!