Table Of Contents
Холст¶
Холст
- это корневой объект, используемый для рисования элементами
Виджет
. Подробнее о его использовании смотрите в документации класса.
- class kivy.graphics.instructions.Callback(callback=None, **kwargs)¶
Базовый класс:
kivy.graphics.instructions.Instruction
Callback - это инструкция, которая будет вызвана при выполнении операции рисования. При добавлении инструкций на холст, вы можете сделать так:
with self.canvas: Color(1, 1, 1) Rectangle(pos=self.pos, size=self.size) Callback(self.my_callback)
Определение колбэка должно быть следующим:
def my_callback(self, instr): print('Меня вызвали!')
Предупреждение
Обратите внимание, что если вы выполняете много вызовов колбэков и/или они затратны, это может значительно замедлить производительность рендеринга.
Обновление вашего холста не происходит до тех пор, пока не произойдет что-то новое. Из вашего колбэка вы можете запросить обновление:
with self.canvas: self.cb = Callback(self.my_callback) # затем позже в коде self.cb.ask_update()
Если вы используете класс Callback для вызова методов рендеринга из другого набора инструментов, у вас могут возникнуть проблемы с контекстом OpenGL. Состояние OpenGL может быть изменено другим набором инструментов, и как только управление программой вернется в Kivy, это может вызвать сбой. Возможны глюки, сбои, возможно появление черных дыр и так далее. Для избежания этого вы можете активировать опцию
reset_context
. Это сбросит состояние контекста OpenGL, чтобы после вызова вашего колбэка рендеринг Kivy был корректным.Предупреждение
reset_context
- это не полный сброс OpenGL. Если у вас возникли проблемы, связанные с этим, пожалуйста, свяжитесь с нами.- ask_update()¶
Сообщите родительскому холсту, что мы хотели бы, чтобы он обновился на следующем кадре. Это полезно, когда вам нужно вызвать перерисовку из-за изменения какого-либо значения, например.
Новое в версии 1.0.4.
- callback¶
Свойство для получения/установки функции.
- reset_context¶
Установите это значение True, если вы хотите сбросить контекст OpenGL для Kivy после вызова колбэка.
- class kivy.graphics.instructions.Canvas(**kwargs)¶
Базовый класс:
kivy.graphics.instructions.CanvasBase
Инструкции, которые вы хотите использовать для рисования.
Заметка
class Canvas поддерживает оператор
with
в Python и его семантику входа и выхода.Использование холста без оператора
with
:self.canvas.add(Color(1., 1., 0)) self.canvas.add(Rectangle(size=(50, 50)))
Использование холста с оператором
with
в Python:with self.canvas: Color(1., 1., 0) Rectangle(size=(50, 50))
- add(Instruction c)¶
- after¶
Свойство для получения группы "after".
- ask_update()¶
Уведомляет холст, что мы хотели бы, чтобы он обновился на следующем кадре. Это полезно, когда вам нужно вызвать перерисовку из-за изменения какого-либо значения, например.
- before¶
Свойство для получения группы "before".
- clear()¶
Удаляет все
Instruction
на холсте, оставляя его чистым.
- draw()¶
Применяет инструкции к нашему окну.
- has_after¶
Свойство для проверки, была ли уже создана группа "after".
Новое в версии 1.7.0.
- has_before¶
Свойство для проверки, была ли уже создана группа "before".
Новое в версии 1.7.0.
- opacity¶
Свойство для получения/установки значения непрозрачности холста.
Новое в версии 1.4.1.
Атрибут opacity контролирует непрозрачность холста и его детей. Будьте осторожны, это накопительный атрибут: значение умножается на текущую глобальную непрозрачность, и результат применяется к текущему цвету контекста.
Например: если у вашего родителя непрозрачность 0,5, а у ребенка непрозрачность 0,2, реальная непрозрачность ребенка будет 0,5 * 0,2 = 0,1.
Затем непрозрачность применяется к шейдеру следующим образом:
frag_color = color * vec4(1.0, 1.0, 1.0, opacity);
- remove(Instruction c)¶
- class kivy.graphics.instructions.CanvasBase¶
Базовый класс:
kivy.graphics.instructions.InstructionGroup
CanvasBase предоставляет методы контекстного менеджера для
Canvas
.
- class kivy.graphics.instructions.ContextInstruction(**kwargs)¶
Базовый класс:
kivy.graphics.instructions.Instruction
Инструкции, которые не имеют непосредственного визуального представления, а вместо этого модифицируют состояние текущего холста, например, привязку текстуры, установку параметров цвета, манипуляции с матрицей и так далее.
- class kivy.graphics.instructions.Instruction(**kwargs)¶
Базовый класс:
kivy.event.ObjectWithUid
Используется только для внутренних нужд, не используйте его напрямую.
- flag_data_update()¶
- flag_update(int do_parent=1)¶
- group¶
group: строка
- proxy_ref¶
Возвращает ссылку на инструкцию без создания ссылки на виджет. См. weakref.proxy для получения дополнительной информации.
Новое в версии 1.7.2.
- class kivy.graphics.instructions.InstructionGroup(**kwargs)¶
Базовый класс:
kivy.graphics.instructions.Instruction
графических инструкций. Может использоваться напрямую следующим образом:
blue = InstructionGroup() blue.add(Color(0, 0, 1, 0.2)) blue.add(Rectangle(pos=self.pos, size=(100, 100)))
green = InstructionGroup() green.add(Color(0, 1, 0, 0.4)) green.add(Rectangle(pos=(100, 100), size=(100, 100)))
# Здесь self должен быть виджетом или его подклассом [self.canvas.add(group) for group in [blue, green]]
- add(Instruction c)¶
Добавить новую инструкцию
Instruction
в наш список.
- children¶
children: список
- clear()¶
Удалить все инструкции
Instructions
.
- get_group(строка groupname)¶
Возвращает итератор для всех инструкций
Instructions
с определенным именем группы.
- indexof(Instruction c)¶
- insert(int index, Instruction c)¶
Вставить новую инструкцию
Instruction
в наш список по индексу.
- length()¶
- remove(Instruction c)¶
Удалить существующую инструкцию
Instruction
из нашего списка.
- remove_group(строка groupname)¶
Удалить все инструкции
Instructions
с определенным именем группы.
- class kivy.graphics.instructions.RenderContext(*args, **kwargs)¶
Базовый класс:
kivy.graphics.instructions.Canvas
Вершинный шейдер
Фрагментный шейдер
Текстура по умолчанию
Стек состояния (цвет, текстура, матрица…)
- shader¶
Возвращает шейдер, прикрепленный к контексту рендера.
- use_parent_frag_modelview¶
Если True, будет использоваться родительская матрица модели видимости фрагмента.
Новое в версии 1.10.1: rc = RenderContext(use_parent_frag_modelview=True)
- use_parent_modelview¶
Если True, будет использоваться родительская матрица модели видимости.
Новое в версии 1.7.0.
До:
rc['modelview_mat'] = Window.render_context['modelview_mat']
Теперь:
rc = RenderContext(use_parent_modelview=True)
- use_parent_projection¶
Если True, будет использоваться родительская матрица проекции.
Новое в версии 1.7.0.
До:
rc['projection_mat'] = Window.render_context['projection_mat']
Теперь:
rc = RenderContext(use_parent_projection=True)
- class kivy.graphics.instructions.VertexInstruction(**kwargs)¶
Базовый класс:
kivy.graphics.instructions.Instruction
которые имеют прямое визуальное представление на холсте, такие как Прямоугольники, Треугольники, Линии, Эллипсы и так далее.
- source¶
Это свойство представляет имя файла для загрузки текстуры. Если вы хотите использовать изображение в качестве источника, сделайте это так:
with self.canvas: Rectangle(source='mylogo.png', pos=self.pos, size=self.size)
Вот эквивалент на языке Kivy:
<MyWidget>: canvas: Rectangle: source: 'mylogo.png' pos: self.pos size: self.size
Примечание
Имя файла будет искаться с использованием функции
kivy.resources.resource_find()
.
- tex_coords¶
Это свойство представляет координаты текстуры, используемые для отрисовки вершинной инструкции. Значение должно быть списком из 8 значений.
Координата текстуры имеет позицию (u, v) и размер (w, h). Размер может быть отрицательным и представлять 'перевернутую' текстуру. По умолчанию tex_coords выглядят так:
[u, v, u + w, v, u + w, v + h, u, v + h]
Вы можете передать свои собственные координаты текстуры, если хотите добиться эффектов.
Предупреждение
Упомянутые выше значения по умолчанию могут быть отрицательными. В зависимости от изображения и поставщиков меток, координаты перевернуты вертикально из-за порядка, в котором изображение хранится внутри. Вместо переворачивания данных изображения, мы просто переворачиваем координаты текстуры для увеличения производительности.
- texture¶
Свойство, представляющее текстуру, используемую для отрисовки этой Инструкции. Вы можете установить новую текстуру так:
from kivy.core.image import Image texture = Image('logo.png').texture с self.canvas: Rectangle(texture=texture, pos=self.pos, size=self.size)
Обычно вы будете использовать атрибут
source
вместо текстуры.