Версия 2.1.0

Quick search

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 вместо текстуры.