Skip to content

Latest commit

 

History

History
106 lines (74 loc) · 3.75 KB

tricks_1.md

File metadata and controls

106 lines (74 loc) · 3.75 KB

Мир вашему дому!

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

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

1.Создание собственных свойств объектов

Пример немного глупый, но всё же. Допустим, надо чтобы число на кнопке росло на 2 при каждом нажатии (событие on_press). Всё просто. Добавляем в описание кнопки поле foo (или любое другое, отличное от полей объектов Kivy) и помещаем в него значение кнопки при следующем нажатии.

	Button:
		text: '1'
		foo:int(self.text)+2
		on_press: self.text = str(self.foo)

2.Импорт объектов внутри разметки

Много ли языков разметки позволяют использовать функции и процедуры ?

О других языках не скажу, но Kivy может. Как?

Вот пример:

	#:import os os
	
	<RootWidget>:
		Button:
			text: os.getcwd()

Главное здесь вот эта строка:

	#:import os os

Понимать ее надо так:

	#:import <alias> <package/class>

3.Объявление переменных

В пункте 1 речь идет об использовании свойств объектов, как переменных. Здесь же мы просто создадим переменную, с которой можем работать внутри разметки.

	#:set var0 2
	#:set var1 'Hello'
	
	Button:
		text: var0
	Label:
		text: var1

4.Включение объектов из внешних файлов

Для обращения к классам и объектам разметки во внешних файлах есть команда include:

#:include <filename>

Вызываем команду в начале файла и можем начинать использовать в разметке объекты из других kv-файлов.

5.Python-выражения

Снова вспомним пункт 1:

	Button:
		text: '1'
		foo:int(self.text)+2
		on_press: self.text = str(self.foo)

Мы преобразуем текст в число и обратно, используя функции Python внутри kv. Удобно, верно?

А теперь изменим задачу. Хотим, чтобы текст на кнопке рос до 21, а потом снова становился единицей:

	Button:
		Button:
			text: '1'
			foo: int(self.text)+2
		on_press: 
            if self.foo > 21: self.text = '1'
            else: self.text = str(self.foo)

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

И приятный бонус под финал:

	Button:
		on_press:
			self.text += '1';print('Hello ',self.text)

Сколько точно команд можно поместить в событие мне неизвестно, но точно достаточно, чтобы сделать интерфейс ваших программ "живее" и отзывчивее!

Спасибо за внимание!:metal: