Версия 2.1.0

Quick search

Графика

Этот пакет собирает множество функций низкого уровня, используемых для рисования. Весь пакет графики совместим с OpenGL ES 2.0 и имеет множество оптимизаций для рендеринга.

Основы

Для рисования на экране вам понадобятся :

  1. объект Canvas.

  2. Instruction objects.

У каждого виджета Widget в Kivy уже есть Canvas по умолчанию. Когда вы создаете виджет, вы можете создать все инструкции, необходимые для рисования. Если self является вашим текущим виджетом, вы можете сделать следующее:

from kivy.graphics import *
with self.canvas:
    # Добавить красный цвет
    Color(1., 0, 0)

    # Добавить прямоугольник
    Rectangle(pos=(10, 10), size=(500, 500))

Инструкции Color и Rectangle автоматически добавляются к объекту холста и будут использоваться при рисовании окна.

Примечание

Инструкции для рисования в Kivy не автоматически относятся к позиции и размеру виджета. Поэтому вам нужно учитывать эти факторы при рисовании. Для того чтобы сделать ваши инструкции для рисования относительными к виджету, инструкции должны быть либо объявлены в KvLang, либо привязаны к изменениям позиции и размера. Пожалуйста, смотрите Добавление фона к макету для более подробной информации.

Механизм перезагрузки GL

Добавлено в версии 1.2.0.

В течение жизни приложения контекст OpenGL может быть потерян. Это происходит:

  • при изменении размера окна в ОС X или платформе Windows, и вы используете pygame в качестве поставщика окна. Это происходит из-за SDL 1.2. В SDL 1.2 необходимо создавать контекст GL каждый раз, когда окно изменяется размер. Это было исправлено в SDL 1.3, но pygame по умолчанию еще не доступен для него.

  • когда Android освобождает ресурсы приложения: когда ваше приложение уходит в фоновый режим, Android может забрать контекст OpenGL, чтобы предоставить ресурс другому приложению. Когда пользователь возвращается в ваше приложение, новый контекст GL предоставляется вашему приложению.

Начиная с версии 1.2.0, мы ввели механизм перезагрузки всех графических ресурсов, используя GPU: Canvas, FBO, Shader, Texture, VBO, и VertexBatch:

  • VBO и VertexBatch создаются нашими графическими инструкциями. У нас есть все необходимые данные для восстановления при перезагрузке.

  • Shader: так же, как и VBO, мы сохраняем исходный код и значения, используемые в шейдере, чтобы мы могли воссоздать вершину/фрагмент/программу.

  • Texture: если у текстуры есть источник (изображение или атлас), изображение перезагружается из источника и повторно загружается в GPU.

Вы должны обработать следующие случаи сами:

  • Текстуры без источника: если вы вручную создали текстуру и вручную копировали данные / буфер в нее, вам нужно будет самостоятельно обрабатывать перезагрузку. Проверьте Texture, чтобы узнать, как управлять этим случаем. (Вывод текста уже создает текстуру и обрабатывает перезагрузку. Вам не нужно перезагружать текст самостоятельно.)

  • FBO: если вы добавляли / удаляли / рисовали на FBO несколько раз, мы не можем перезагрузить его. У нас нет истории инструкций, добавленных в него. Как и для текстур без источника, проверьте Framebuffer, чтобы узнать, как управлять этим случаем.

class kivy.graphics.ApplyContextMatrix(**kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

Применяет матрицу из «source_stack» к стеку матриц «target_stack»

Добавлено в версии 1.6.0.

source_stack

Имя стека матриц, которое следует использовать как источник. Может быть ‘modelview_mat’, ‘projection_mat’ или ‘frag_modelview_mat’.

Добавлено в версии 1.6.0.

target_stack

Имя стека матриц, которое следует использовать как цель. Может быть ‘modelview_mat’, ‘projection_mat’ или ‘frag_modelview_mat’.

Добавлено в версии 1.6.0.

class kivy.graphics.Bezier(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Добавлено в версии 1.0.8.

Parameters
points: list

Список точек в формате (x1, y1, x2, y2…)

segments: int, по умолчанию 180

Определяет, сколько сегментов требуется для рисования кривой. Рисование будет более плавным, если у вас много сегментов.

loop: bool, по умолчанию False

Устанавливает замыкание кривой Безье, соединяя последнюю точку с первой.

dash_length: int

Длина сегмента (если пунктирный), по умолчанию 1.

dash_offset: int

Расстояние между концом одного сегмента и началом следующего, по умолчанию 0. Изменение этого значения делает линию пунктирной.

dash_length

Свойство для получения/установки длины пунктирных отрезков в кривой.

dash_offset

Свойство для получения/установки смещения между пунктирными отрезками в кривой.

points

Свойство для получения/установки точек кривой Безье.

Предупреждение

Это всегда будет воссоздавать всю графику из нового списка точек. Это может быть очень ресурсоемким для ЦП.

segments

Свойство для получения/установки количества сегментов кривой.

class kivy.graphics.BindTexture(**kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

Инструкция BindTexture свяжет текстуру и включит GL_TEXTURE_2D для последующего рисования.

Parameters
texture: Texture

Указывает текстуру для привязки к заданному индексу.

source

Устанавливает/получает источник (имя файла) для загрузки текстуры.

class kivy.graphics.BorderImage(**kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Rectangle

Концепция CSS3 граничного изображения.

Parameters
border: list

Информация о границе в формате (низ, право, верх, лево). Каждое значение в пикселях.

auto_scale: string

Добавлено в версии 1.9.1.

Изменено в версии 1.9.2: Ранее это был булев тип, а теперь это строковое значение состояния.

Может быть одним из следующих: 'off', 'both', 'x_only', 'y_only', 'y_full_x_lower', 'x_full_y_lower', 'both_lower'.

Автомасштаб управляет поведением 9-сегментной граничной области.

По умолчанию значения границ сохраняются точно, что означает, что если общий размер объекта меньше значений границ, у вас могут возникнуть 'ошибки визуализации', где текстура появляется наизнанку. Это также делает невозможным создание кнопки с закругленными углами, которая масштабируется больше, чем размер исходной текстуры. Различные варианты auto_scale позволяют достичь некоторых комбинаций двух типов отображения.

'off': это значение по умолчанию и ведет себя так же, как BorderImage до версии 1.9.2, когда auto_scale был False.

'both': Масштабирует границы как в горизонтальной, так и в вертикальной плоскостях в соответствии с размером BorderImage, что отключает BorderImage и делает его рендеринг таким же, как у обычного Image.

'x_only': Вертикальное измерение функционирует как обычно, а горизонтальное масштабируется до ширины BorderImage.

'y_only': Горизонтальное измерение функционирует как обычно, а вертикальное масштабируется до высоты BorderImage.

'y_full_x_lower': Вертикальное измерение масштабируется, как и в 'y_only', горизонтальное масштабируется, если размер масштабированной версии будет меньше предоставленной границы.

'x_full_y_lower': Горизонтальное измерение масштабируется, как и в 'x_only', вертикальное масштабируется, если размер масштабированной версии будет меньше предоставленной границы.

'both_lower': Это то, что делал auto_scale, когда он был True в версии 1.9.1. Оба измерения X и Y будут масштабироваться, если BorderImage будет меньше источника.

Если размер BorderImage меньше суммы его границ по горизонтали или вертикали, и это свойство установлено в True, границы будут масштабированы для учета меньшего размера.

auto_scale

Свойство для установки автоматического масштабирования углов, когда BorderImage слишком мал.

border

Свойство для получения/установки границы класса.

display_border

Свойство для получения/установки размера отображаемой границы.

class kivy.graphics. 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

Свойство для получения/установки функции (callback).

reset_context

Установите это значение в True, если вы хотите сбросить контекст OpenGL для Kivy после вызова обратного вызова.

class kivy.graphics. Canvas ( **kwargs )

Базовый класс: kivy.graphics.instructions.CanvasBase

Инструкции, которые вы хотите использовать для рисования.

Примечание

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.CanvasBase

Базовый класс: kivy.graphics.instructions.InstructionGroup

CanvasBase предоставляет методы менеджера контекста для Canvas.

class kivy.graphics.ChangeState(**kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

текущий контекст рендеринга.

Добавлено в версии 1.6.0.

class kivy.graphics.ClearBuffers(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.Instruction

Добавлено в версии 1.3.0.

Очищает буферы, указанные в свойстве маски буфера инструкций. По умолчанию очищается только буфер цвета.

clear_color

Если True, то будет очищен буфер цвета.

clear_depth

Если True, то будет очищен буфер глубины.

clear_stencil

Если True, то будет очищен буфер трафарета.

class kivy.graphics.ClearColor(r, g, b, a, **kwargs)

Базовый класс: kivy.graphics.instructions.Instruction

Добавлено в версии 1.3.0.

Задает цвет очистки, используемый для очистки буферов с помощью функции glClear или графических инструкций ClearBuffers.

a

Альфа-компонент, от 0 до 1.

b

Синий компонент, от 0 до 1.

g

Зеленый компонент, от 0 до 1.

r

Красный компонент, от 0 до 1.

rgb

Цвет RGB, список из 3 значений в диапазоне от 0 до 1, альфа будет равна 1.

rgba

Цвет RGBA, список из 4 значений в диапазоне от 0 до 1.

class kivy.graphics.Color(**args, ****kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

рисовать после него.

Это представляет цвет между 0 и 1, но он применяется как множитель к текстуре любых инструкций вершин, следующих за ним на холсте. Если текстура не установлена, инструкция вершины принимает точный цвет инструкции Color.

Например, если у Rectangle есть текстура с равным цветом (0.5, 0.5, 0.5, 1.0) и предшествующий Color имеет rgba=(1, 0.5, 2, 1), фактический вид цвета будет (0.5, 0.25, 1.0, 1.0), так как инструкция Color применяется как множитель к каждому компоненту rgba. В этом случае компонент Color, выходящий за пределы диапазона 0-1, дает видимый результат, так как интенсивность синего компонента удваивается.

Чтобы объявить цвет в Python, вы можете сделать следующее:

from kivy.graphics import Color

# создать красный цвет
c = Color(1, 0, 0)
# создать синий цвет
c = Color(0, 1, 0)
# создать синий цвет с 50% альфа-каналом
c = Color(0, 1, 0, .5)

# используя режим hsv
c = Color(0, 1, 1, mode='hsv')
# используя режим hsv + альфа-канал
c = Color(0, 1, 1, .2, mode='hsv')

Вы также можете установить компоненты цвета, доступные как свойства, передав их в виде именованных аргументов:

c = Color(b=0.5)  # установить только синий компонент

В языке kv вы можете устанавливать свойства цвета напрямую:

<Rule>:
    canvas:
        # красный цвет
        Color:
            rgb: 1, 0, 0
        # синий цвет
        Color:
            rgb: 0, 1, 0
        # синий цвет с 50% альфа-каналом
        Color:
            rgba: 0, 1, 0, .5

        # используя режим hsv
        Color:
            hsv: 0, 1, 1
        # используя режим hsv + альфа-канал
        Color:
            hsv: 0, 1, 1
            a: .5
a

Компонент альфа, от 0 до 1.

b

Компонент синего, от 0 до 1.

g

Компонент зеленого, от 0 до 1.

h

Компонент оттенка, от 0 до 1.

hsv

Цвет в формате HSV, список из 3 значений в диапазоне 0-1, альфа будет равна 1.

r

Компонент красного, от 0 до 1.

rgb

Цвет в формате RGB, список из 3 значений в диапазоне 0-1. Альфа будет равна 1.

rgba

Цвет в формате RGBA, список из 4 значений в диапазоне 0-1.

s

Компонент насыщенности, от 0 до 1.

v

Компонент значения, от 0 до 1.

Вот перевод текста с сохранением тегов:
class kivy.graphics.ContextInstruction(**kwargs)

Базовый класс: kivy.graphics.instructions.Instruction

Команды, которые не имеют непосредственного визуального представления, а вместо этого изменяют текущее состояние Canvas, например, привязку текстуры, установку параметров цвета, манипуляции с матрицей и так далее.

class kivy.graphics.Ellipse(*args, **kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Rectangle

Изменено в версии 1.0.7: Добавлены angle_start и angle_end.

Parameters
segments: int, значение по умолчанию 180

Определяет, сколько сегментов необходимо для рисования эллипса. Рисование будет более плавным, если у вас есть много сегментов.

angle_start: int, значение по умолчанию 0

Задает начальный угол, в градусах, части диска.

angle_end: int, значение по умолчанию 360

Задает конечный угол, в градусах, части диска.

angle_end

Конечный угол эллипса в градусах, значение по умолчанию 360.

angle_start

Начальный угол эллипса в градусах, значение по умолчанию 0.

segments

Свойство для получения/установки количества сегментов эллипса.

Вот перевод текста с сохранением тегов:
class kivy.graphics.Fbo(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.RenderContext

“with” statement.

Parameters
clear_color: tuple, значение по умолчанию (0, 0, 0, 0)

Задает цвет по умолчанию для очистки буфера кадра.

size: tuple, значение по умолчанию (1024, 1024)

Размер буфера кадра по умолчанию.

push_viewport: bool, значение по умолчанию True

Если True, то размер OpenGL-вьюпорта будет установлен равным размеру буфера кадра, и автоматически восстановится при освобождении буфера кадра.

with_depthbuffer: bool, значение по умолчанию False

Если True, то буфер кадра будет выделен с буфером Z.

with_stencilbuffer: bool, значение по умолчанию False

Добавлено в версии 1.9.0.

Если True, то буфер кадра будет выделен с буфером трафарета.

texture: Texture, значение по умолчанию None

Если None, то будет создана текстура по умолчанию.

Примечание

Использование как with_stencilbuffer, так и with_depthbuffer не поддерживается в kivy 1.9.0

add_reload_observer(callback)

Добавляет обратный вызов для вызова после полной перезагрузки графического контекста. Здесь вы можете перезагрузить свои пользовательские данные в GPU.

Добавлено в версии 1.2.0.

Parameters
callback: func(context) -> return None

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

bind()

Привязывает FBO к текущему OpenGL-контексту. Привязка означает, что вы включаете буфер кадра, и все операции рисования будут выполняться внутри буфера кадра, пока не будет вызван release().

Операции привязки/освобождения вызываются автоматически, когда вы добавляете графические объекты в него. Если вы хотите управлять буфером кадра сами, вы можете использовать его так:

self.fbo = FBO()
self.fbo.bind()
# выполните любую команду рисования
self.fbo.release()

# затем ваша текстура fbo доступна по
print(self.fbo.texture)
clear_buffer()

Очищает буфер кадра с использованием clear_color.

Необходимо самостоятельно привязать буфер кадра перед вызовом этого метода:

fbo.bind()
fbo.clear_buffer()
fbo.release()
clear_color

Цвет очистки в формате (красный, зеленый, синий, альфа).

get_pixel_color(int wx, int wy)

Получает цвет пикселя с указанными координатами окна wx, wy. Возвращает результат в формате RGBA.

Добавлено в версии 1.8.0.

pixels

Получает текстуру пикселей, только в формате RGBA, беззнаковый бай т. Начало изображения находится в левом нижнем углу.

Добавлено в версии 1.7.0.

release()

Освобождает буфер кадра (отвязывает).

remove_reload_observer(callback)

Удаляет обратный вызов из списка наблюдателей, ранее добавленный add_reload_observer().

Добавлено в версии 1.2.0.

size

Размер буфера кадра в формате (ширина, высота).

Если вы измените размер, содержимое буфера кадра будет утеряно.

texture

Возвращает текстуру буфера кадра

exception kivy.graphics.GraphicException

Базовый класс: Exception

Исключение, возникающее при ошибке в графике.

class kivy.graphics.Instruction(**kwargs)

Базовый класс: kivy.event.ObjectWithUid

Только для использования, не используйте его напрямую.

flag_data_update()
flag_update(int do_parent=1)
group

group: unicode

proxy_ref

Возвращает прокси-ссылку на объект Instruction, то есть, без создания ссылки на виджет. См. weakref.proxy для получения дополнительной информации.

Добавлено в версии 1.7.2.

class kivy.graphics.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: list

clear()

Удалить все Instructions.

get_group(unicode groupname)

Возвращает итерируемый объект для всех Instructions с определенным именем группы.

indexof(Instruction c)
insert(int index, Instruction c)

Вставить новую Instruction в наш список по индексу.

length()
remove(Instruction c)

Удалить существующую Instruction из нашего списка.

remove_group(unicode groupname)

Удалить все Instructions с определенным именем группы.

class kivy.graphics.Line(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Рисование линии легко:

with self.canvas:
    Line(points=[100, 100, 200, 100, 100, 200], width=10)

У линии есть 3 внутренних режима рисования, о которых вам следует знать для достижения оптимальных результатов:

  1. Если width равно 1.0, то будет использоваться стандартное рисование GL_LINE из OpenGL. dash_length, dash_offset и dashes будут работать, в то время как свойства для cap и joint здесь не имеют значения.

  2. Если width больше 1.0, то будет использоваться пользовательский метод рисования на основе триангуляции. dash_length, dash_offset и dashes будут проигнорированы, но свойства для cap и joint будут работать.

  3. Если width равно 0, то будет использоваться метод рисования с использованием вершинных точек. Свойства для dash_length, dash_offset, dashes, cap и joint будут проигнорированы.

_images/line-instruction.png
Parameters
points: list

Список точек в формате (x1, y1, x2, y2…)

dash_length: int

Длина сегмента (если пунктир), по умолчанию 1.

dash_offset: int

Смещение между концом одного сегмента и началом следующего, по умолчанию 0. Изменение этого параметра делает линию пунктирной.

dashes: list целых чисел

Список [Длина ВКЛ, смещение, Длина ВКЛ, смещение, …]. Например, [2,4,1,6,8,2] создаст линию с первой длиной ВКЛ 2, затем смещение 4, затем длина ВКЛ 1, затем смещение 6 и так далее. По умолчанию []. Изменение этого параметра делает линию пунктирной и переопределяет dash_length и dash_offset.

width: float

Ширина линии, по умолчанию 1.0.

cap: str, по умолчанию 'round'

См. cap для получения дополнительной информации.

joint: str, по умолчанию 'round'

См. joint для получения дополнительной информации.

cap_precision: int, по умолчанию 10

См. cap_precision для получения дополнительной информации.

joint_precision: int, по умолчанию 10

См. joint_precision для получения дополнительной информации. См. cap_precision для получения дополнительной информации.

joint_precision: int, по умолчанию 10

См. joint_precision для получения дополнительной информации.

close: bool, по умолчанию False

Если True, линия будет замкнутой.

circle: list

Если задан, параметр points будет установлен для построения круга. См. circle для получения дополнительной информации.

ellipse: list

Если задан, параметр points будет установлен для построения эллипса. См. ellipse для получения дополнительной информации.

rectangle: list

Если задан, параметр points будет установлен для построения прямоугольника. См. rectangle для получения дополнительной информации.

bezier: list

Если задан, параметр points будет установлен для построения кривой Безье. См. bezier для получения дополнительной информации.

bezier_precision: int, по умолчанию 180

Точность рисования кривой Безье.

Изменено в версии 1.0.8: добавлены dash_offset и dash_length.

Изменено в версии 1.4.1: добавлены width, cap, joint, cap_precision, joint_precision, close, ellipse, rectangle.

Изменено в версии 1.4.1: добавлены bezier, bezier_precision.

Изменено в версии 1.11.0: добавлены dashes.

bezier

Используйте этот параметр для построения кривой Безье, без вычисления points. Вы можете только установить этот параметр, но не получить его.

Аргумент должен быть кортежем из 2n элементов, где n - количество точек.

Пример использования:

Line(bezier=(x1, y1, x2, y2, x3, y3)

Добавлено в версии 1.4.2.

Примечание

Вычисления кривой Безье дешевы для небольшого количества точек, но сложность квадратичная, поэтому линии с большим количеством точек могут быть очень дорогими в создании, используйте с осторожностью!

bezier_precision

Количество итераций для рисования кривой Безье между 2 сегментами, по умолчанию 180. bezier_precision должен быть не менее 1.

Добавлено в версии 1.4.2.

cap

Определяет форму конца линии, по умолчанию 'round' (круглая). Может быть одним из следующих значений: 'none' (отсутствует), 'square' (квадратная) или 'round' (круглая).

Добавлено в версии 1.4.1.

cap_precision

Количество итераций для рисования круглого конца линии, по умолчанию 10. Значение cap_precision должно быть не менее 1.

Добавлено в версии 1.4.1.

circle

Используйте это свойство для построения круга без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем из (center_x, center_y, radius, angle_start, angle_end, segments):

  • center_x и center_y представляют центр круга

  • radius представляет радиус круга

  • (необязательно) angle_start и angle_end задаются в градусах. Значение по умолчанию - 0 и 360.

  • (необязательно) segments - это точность построения круга. Значение по умолчанию рассчитывается исходя из диапазона угла.

Обратите внимание, что решение о том, закрывать круг или нет, остается за вами.

Например, для построения простого круга на Python:

# Простой круг
Line(circle=(150, 150, 50))
# Только от 90 до 180 градусов
Line(circle=(150, 150, 50, 90, 180))

# Только от 90 до 180 градусов с несколькими сегментами
Line(circle=(150, 150, 50, 90, 180, 20))

Добавлено в версии 1.4.1.

close

Если True, линия будет закрыта.

Добавлено в версии 1.4.1.

dash_length

Свойство для получения/установки длины пунктира на линии

Добавлено в версии 1.0.8.

dash_offset

Свойство для получения/установки смещения между пунктирами на линии

Добавлено в версии 1.0.8.

dashes

Свойство для получения/установки dashes.

Список [длина ON, смещение, длина ON, смещение, ...]. Например, [2, 4, 1, 6, 8, 2] создаст линию с первой длиной ON 2, затем смещением 4, затем с длиной ON 1, затем смещением 6 и так далее.

Добавлено в версии 1.11.0.

ellipse

Используйте это свойство для построения эллипса без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем из (x, y, width, height, angle_start, angle_end, segments):

  • x и y представляют нижний левый угол эллипса

  • width и height представляют размер эллипса

  • (необязательно) angle_start и angle_end задаются в градусах. Значение по умолчанию - 0 и 360.

  • (необязательно) segments - это точность построения эллипса. Значение по умолчанию рассчитывается исходя из диапазона угла.

Обратите внимание, что решение о том, закрывать эллипс или нет, остается за вами.

Например, для построения простого эллипса на Python:

# Простой эллипс
Line(ellipse=(0, 0, 150, 150))
# Только от 90 до 180 градусов
Line(ellipse=(0, 0, 150, 150, 90, 180))

# Только от 90 до 180 градусов с несколькими сегментами
Line(ellipse=(0, 0, 150, 150, 90, 180, 20))

Добавлено в версии 1.4.1.

joint

Определите соединение линии, по умолчанию - «round». Может быть одним из ‘none’, ‘round’, ‘bevel’, ‘miter’.

Добавлено в версии 1.4.1.

joint_precision

Количество итераций для построения «round» соединения, по умолчанию - 10. joint_precision должен быть как минимум 1.

Добавлено в версии 1.4.1.

points

Свойство для получения/установки точек на линии

Предупреждение

Это всегда будет перестраивать всю графику из нового списка точек. Это может быть очень затратным по CPU.

rectangle

Используйте это свойство для построения прямоугольника без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем из (x, y, width, height):

  • x и y представляют позицию нижнего левого угла прямоугольника

  • width и height представляют размер

Линия автоматически закрывается.

Использование:

Line(rectangle=(0, 0, 200, 200))

Добавлено в версии 1.4.1.

rounded_rectangle

Используйте это свойство для построения прямоугольника с закругленными углами, без вычисления points. Вы можете только установить это свойство, но не получить его.

Аргумент должен быть кортежем одного из следующих видов:

  • (x, y, width, height, corner_radius)

  • (x, y, width, height, corner_radius, resolution)

  • (x, y, width, height, corner_radius1, corner_radius2, corner_radius3, corner_radius4)

  • (x, y, width, height, corner_radius1, corner_radius2, corner_radius3, corner_radius4, resolution)

  • x и y представляют позицию нижнего левого угла прямоугольника

  • width и height представляют размер

  • corner_radius - это количество пикселей между двумя границами и центром дуги окружности, соединяющей их

  • resolution - количество сегментов линии, которые будут использоваться для построения дуги окружности в каждом углу (по умолчанию - 30)

Линия автоматически закрывается.

Использование:

Line(rounded_rectangle=(0, 0, 200, 200, 10, 20, 30, 40, 100))

Добавлено в версии 1.9.0.

width

Определяет ширину линии, по умолчанию 1.0.

Добавлено в версии 1.4.1.

class kivy.graphics.LoadIdentity(**kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

свойство стека инструкций (по умолчанию = 'modelview_mat')

Добавлено в версии 1.6.0.

stack

Имя стека матрицы для использования. Может быть 'modelview_mat', 'projection_mat' или 'frag_modelview_mat'.

class kivy.graphics.MatrixInstruction(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

matrix

Свойство матрицы. Матрица из модуля трансформации. Установка матрицы с использованием этого свойства при изменении важна, так как это уведомит контекст об обновлении.

stack

Имя стека матрицы для использования. Может быть 'modelview_mat', 'projection_mat' или 'frag_modelview_mat'.

Добавлено в версии 1.6.0.

class kivy.graphics.Mesh(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

В OpenGL ES 2.0 и в нашей реализации графики нельзя иметь более чем 65535 индексов.

Список вершин описывается следующим образом:

vertices = [x1, y1, u1, v1, x2, y2, u2, v2, ...]
            |            |  |            |
            +---- i1 ----+  +---- i2 ----+

Если вы хотите нарисовать треугольник, добавьте 3 вершины. Затем вы можете создать список индексов следующим образом:

indices = [0, 1, 2]

Добавлено в версии 1.1.0.

Parameters
vertices: iterable

Список вершин в формате (x1, y1, u1, v1, x2, y2, u2, v2…).

indices: iterable

Список индексов в формате (i1, i2, i3…).

mode: str

Режим vbo. Проверьте mode для получения более подробной информации. По умолчанию 'points'.

fmt: list

Формат вершин, по умолчанию, каждая вершина описывается 2D координатами (x, y) и 2D текстурной координатой (u, v). Каждый элемент списка должен быть кортежем или списком, вида

(имя_переменной, размер, тип)

что позволит отобразить данные вершины на инструкции glsl.

[(b'v_pos', 2, 'float'), (b'v_tc', 2, 'float'),]

позволит использовать

attribute vec2 v_pos; attribute vec2 v_tc;

в вершинном шейдере glsl.

Изменено в версии 1.8.1: Раньше vertices и indices всегда преобразовывались в список, теперь они преобразовываются в список только если они не реализуют интерфейс буфера. Таким образом, массивы numpy, массивы python и т. д. используются на месте, без создания дополнительных копий. Однако буферы не могут быть только для чтения (хотя они не изменяются из-за ограничения cython) и должны быть непрерывными в памяти.

Примечание

При передаче memoryview или экземпляра, реализующего интерфейс буфера, vertices должен быть буфером с плавающей точкой (код 'f' в python array), а indices должен быть буфером с беззнаковым short (код 'H' в python array). Массивы в других форматах все равно должны быть преобразованы внутренне, что аннулирует любые потенциальные преимущества.

indices

Индексы вершин, используемые для указания порядка при рисовании сетки.

mode

Режим VBO, используемый для рисования вершин/индексов. Может быть 'points', 'line_strip', 'line_loop', 'lines', 'triangles', 'triangle_strip' или 'triangle_fan'.

vertices

Список координат x, y, u, v, используемых для создания сетки. В настоящее время инструкция Mesh не позволяет изменять формат вершин, что означает, что доступны только x, y + одна текстурная координата.

class kivy.graphics.Point(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

ширина/высота в 2 раза больше pointsize.

Parameters
points: list

Список точек в формате (x1, y1, x2, y2…), где каждая пара координат указывает центр новой точки.

pointsize: float, по умолчанию 1.

Размер точки, измеряется от центра до края. Значение 1.0 означает, что реальный размер будет 2.0 x 2.0.

Предупреждение

Начиная с версии 1.0.7, инструкции вершины имеют ограничение в 65535 вершинах (точнее, в индексах вершин). 2 записи в списке (x, y) будут преобразованы в 4 вершины. Таким образом, ограничение внутри класса Point() составляет 2^15-2.

add_point(float x, float y)

Добавляет точку в текущий список points.

Если вы планируете добавить несколько точек, предпочтительно использовать этот метод, а не переназначать новый список points. Переназначение нового списка points приведет к пересчету и повторной загрузке всего буфера на GPU. Если вы используете add_point, будет загружена только разница.

points

Свойство для получения/установки центральных точек в списке точек. Каждая пара координат указывает центр новой точки.

pointsize

Свойство для получения/установки размера точки. Размер измеряется от центра до края, поэтому значение 1.0 означает, что реальный размер будет 2.0 x 2.0.

class kivy.graphics.PopMatrix(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

stack

Имя стека матрицы для использования. Может быть ‘modelview_mat’, ‘projection_mat’ или ‘frag_modelview_mat’.

Добавлено в версии 1.6.0.

class kivy.graphics.PopState(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

Стек состояний.

Добавлено в версии 1.6.0.

class kivy.graphics.PushMatrix(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

stack

Имя стека матрицы для использования. Может быть ‘modelview_mat’, ‘projection_mat’ или ‘frag_modelview_mat’.

Добавлено в версии 1.6.0.

class kivy.graphics.PushState(*args, **kwargs)

Базовый класс: kivy.graphics.instructions.ContextInstruction

Стек состояний.

Добавлено в версии 1.6.0.

class kivy.graphics.Quad(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
points: list

Список точек в формате (x1, y1, x2, y2, x3, y3, x4, y4).

points

Свойство для получения/установки точек квадрата.

class kivy.graphics.Rectangle(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
pos: list

Позиция прямоугольника в формате (x, y).

size: list

Размер прямоугольника в формате (ширина, высота).

pos

Свойство для получения/установки позиции прямоугольника.

size

Свойство для получения/установки размера прямоугольника.

class kivy.graphics.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.Rotate(*args, **kwargs)

Базовый класс: kivy.graphics.context_instructions.Transform

на матрицу модели представления. Вы можете установить свойства инструкций после этого, например,

rot.angle = 90
rot.axis = (0, 0, 1)
angle

Свойство для получения/установки угла поворота.

axis

Свойство для получения/установки оси вращения.

Формат оси: (x, y, z).

origin

Происхождение вращения.

Добавлено в версии 1.7.0: set() метод больше не использует новое свойство origin.

Формат происхождения может быть либо (x, y), либо (x, y, z).

set(float angle, float ax, float ay, float az)

Устанавливает угол и ось вращения.

>>> rotationobject.set(90, 0, 0, 1)

Устарело начиная с версии 1.7.0: Метод set() больше не использует новое свойство origin.

class kivy.graphics.Scale(*args, **kwargs)

Базовый класс: kivy.graphics.context_instructions.Transform

Создается с одним или тремя аргументами:

Scale(s)         # масштабировать все три оси одинаково
Scale(x, y, z)   # масштабировать оси независимо

Устарело начиная с версии 1.6.0: Устарело одиночное свойство масштаба в пользу x, y, z, xyz осей независимых коэффициентов масштабирования.

origin

Происхождение масштабирования.

Добавлено в версии 1.9.0.

Формат происхождения может быть либо (x, y), либо (x, y, z).

scale

Свойство для получения/установки масштаба.

Устарело начиная с версии 1.6.0: Устарело в пользу свойств масштаба по осям x, y, z, xyz и т. д.

x

Свойство для получения/установки масштаба по оси X.

Добавлено в версии 1.6.0.

y

Свойство для получения/установки масштаба по оси Y.

Добавлено в версии 1.6.0.

z

Свойство для получения/установки масштаба по оси Z.

Добавлено в версии 1.6.0.

z

Свойство для получения/установки масштаба по оси Z.

Изменено в версии 1.6.0.

class kivy.graphics.SmoothLine(**kwargs)

Базовый класс: kivy.graphics.vertex_instructions.Line

Имеет несколько недостатков:

  • Рисование линии с альфой, вероятно, не даст желаемого результата, если линия пересекает саму себя.

  • cap, joint и свойства dash не поддерживаются.

  • используется пользовательская текстура с предварительным умножением альфы.

  • линии с шириной менее 1px не поддерживаются: они будут выглядеть одинаково.

Предупреждение

Это незавершенная работа, экспериментальная и может привести к сбоям.

Добавлено в версии 1.9.0.

overdraw_width

Определяет ширину излишней отрисовки линии, по умолчанию 1.2.

premultiplied_texture()
class kivy.graphics.StencilPop

Базовый класс: kivy.graphics.instructions.Instruction

Извлекает текущий стек трафарета. Смотрите документацию по модулю для получения дополнительной информации.

class kivy.graphics.StencilPush

Базовый класс: kivy.graphics.instructions.Instruction

Помещает стек трафарета. См. документацию по модулю для получения дополнительной информации.

class kivy.graphics.StencilUnUse

Базовый класс: kivy.graphics.instructions.Instruction

Использует текущий буфер трафарета для снятия маски.

class kivy.graphics.StencilUse(**kwargs)

Базовый класс: kivy.graphics.instructions.Instruction

Дополнительная информация.

func_op

Определяет операцию трафарета, которую следует использовать для glStencilFunc(). Может быть одним из 'never', 'less', 'equal', 'lequal', 'greater', 'notequal', 'gequal' или 'always'.

class kivy.graphics.Translate(*args, **kwargs)

Базовый класс: kivy.graphics.context_instructions.Transform

Создается либо:

Translate(x, y)         # перемещение только по двум осям
Translate(x, y, z)      # перемещение по всем трем осям
x

Свойство для получения/установки перевода по оси X.

xy

2-кортеж с вектором перевода в 2D для осей x и y.

xyz

3-кортеж с вектором перевода в 3D по осям x, y и z.

y

Свойство для получения/установки перевода по оси Y.

z

Свойство для получения/установки перевода по оси Z.

class kivy.graphics.Triangle(**kwargs)

Базовый класс: kivy.graphics.instructions.VertexInstruction

Parameters
points: list

Список точек в формате (x1, y1, x2, y2, x3, y3).

points

Свойство для получения/установки точек треугольника.

class kivy.graphics.UpdateNormalMatrix

Базовый класс: kivy.graphics.instructions.ContextInstruction

Обновляет матрицу нормали 'normal_mat' на основе текущей модельно-видовой матрицы. Это вычислит 'normal_mat' как: обратную(транспонированную(мат3(mvm)))

Добавлено в версии 1.6.0.

class kivy.graphics.VertexInstruction(**kwargs)

Базовый класс: kivy.graphics.instructions.Instruction

Инструкции вершин используются для элементов, имеющих прямое визуальное представление на холсте, таких как Прямоугольники, Треугольники, Линии, Эллипсы и так далее.

source

Это свойство представляет имя файла для загрузки текстуры. Если вы хотите использовать изображение в качестве источника, сделайте это следующим образом:

with self.canvas:
    Rectangle(source='mylogo.png', pos=self.pos, size=self.size)

Вот эквивалент на языке Kivy:

<МойВиджет>:
    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
with self.canvas:
    Rectangle(texture=texture, pos=self.pos, size=self.size)

Обычно вы будете использовать атрибут source вместо текстуры.

kivy.graphics.gl_init_resources()