Table Of Contents
Графика¶
Этот пакет собирает множество функций низкого уровня, используемых для рисования. Весь пакет графики совместим с OpenGL ES 2.0 и имеет множество оптимизаций для рендеринга.
Основы¶
Для рисования на экране вам понадобятся :
объект
Canvas
.
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 внутренних режима рисования, о которых вам следует знать для достижения оптимальных результатов:
Если
width
равно 1.0, то будет использоваться стандартное рисование GL_LINE из OpenGL.dash_length
,dash_offset
иdashes
будут работать, в то время как свойства для cap и joint здесь не имеют значения.Если
width
больше 1.0, то будет использоваться пользовательский метод рисования на основе триангуляции.dash_length
,dash_offset
иdashes
будут проигнорированы, но свойства для cap и joint будут работать.Если
width
равно 0, то будет использоваться метод рисования с использованием вершинных точек. Свойства дляdash_length
,dash_offset
,dashes
, cap и joint будут проигнорированы.
- 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).
- 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
Имеет несколько недостатков:
Рисование линии с альфой, вероятно, не даст желаемого результата, если линия пересекает саму себя.
используется пользовательская текстура с предварительным умножением альфы.
линии с шириной менее 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()¶