Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

SplitContainer

Наследует: Container < Control < CanvasItem < Node < Object

Наследуется от: HSplitContainer, VSplitContainer

Контейнер, в котором элементы управления для дочерних узлов располагаются горизонтально или вертикально, и предусмотрены захваты для регулировки соотношения разделения пространства между ними.

Описание

Контейнер, который располагает дочерние элементы управления горизонтально или вертикально и создает между ними захватные элементы. Захватные элементы можно перетаскивать, чтобы изменять соотношение размеров между дочерними элементами управления.

Обучающие материалы

Свойства

bool

collapsed

false

bool

drag_area_highlight_in_editor

false

int

drag_area_margin_begin

0

int

drag_area_margin_end

0

int

drag_area_offset

0

bool

drag_nested_intersections

false

DraggerVisibility

dragger_visibility

0

bool

dragging_enabled

true

int

split_offset

0

PackedInt32Array

split_offsets

PackedInt32Array(0)

bool

touch_dragger_enabled

false

bool

vertical

false

Методы

void

clamp_split_offset(priority_index: int = 0)

Control

get_drag_area_control()

Array[Control]

get_drag_area_controls()

Свойства темы

Color

touch_dragger_color

Color(1, 1, 1, 0.3)

Color

touch_dragger_hover_color

Color(1, 1, 1, 0.6)

Color

touch_dragger_pressed_color

Color(1, 1, 1, 1)

int

autohide

1

int

minimum_grab_thickness

6

int

separation

12

Texture2D

grabber

Texture2D

h_grabber

Texture2D

h_touch_dragger

Texture2D

touch_dragger

Texture2D

v_grabber

Texture2D

v_touch_dragger

StyleBox

split_bar_background


Сигналы

drag_ended() 🔗

Генерируется, когда пользователь заканчивает перетаскивание.


drag_started() 🔗

Генерируется, когда пользователь начинает перетаскивание.


dragged(offset: int) 🔗

Вызывается при перетаскивании любого объекта пользователем.


Перечисления

enum DraggerVisibility: 🔗

DraggerVisibility DRAGGER_VISIBLE = 0

Значок раздельного перетаскивателя всегда виден, когда autohide равно false, в противном случае виден только при наведении курсора на него.

Размер значка захвата определяет минимальное separation.

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

DraggerVisibility DRAGGER_HIDDEN = 1

Значок раздельного перетаскивателя никогда не отображается независимо от значения autohide.

Размер значка перетаскивателя определяет минимальное separation.

DraggerVisibility DRAGGER_HIDDEN_COLLAPSED = 2

Значок перетаскивателя для разделения не отображается, а полоса разделения свернута до нулевой толщины.


Описания свойств

bool collapsed = false 🔗

  • void set_collapsed(value: bool)

  • bool is_collapsed()

Если true, перетаскиватели будут отключены, а размеры дочерних элементов будут такими, как если бы все split_offsets было 0.


bool drag_area_highlight_in_editor = false 🔗

  • void set_drag_area_highlight_in_editor(value: bool)

  • bool is_drag_area_highlight_in_editor_enabled()

Выделяет область перетаскивания Rect2, чтобы вы могли видеть, где она находится во время разработки. Область перетаскивания золотая, если dragging_enabled равно true, и красная, если false.


int drag_area_margin_begin = 0 🔗

  • void set_drag_area_margin_begin(value: int)

  • int get_drag_area_margin_begin()

Уменьшает размер области перетаскивания и разделительной полосы split_bar_background в начале контейнера.


int drag_area_margin_end = 0 🔗

  • void set_drag_area_margin_end(value: int)

  • int get_drag_area_margin_end()

Уменьшает размер области перетаскивания и разделительной полосы split_bar_background в конце контейнера.


int drag_area_offset = 0 🔗

  • void set_drag_area_offset(value: int)

  • int get_drag_area_offset()

Смещает область перетаскивания по оси контейнера, чтобы предотвратить перекрытие области перетаскивания ScrollBar или другого выбираемого Control дочернего узла.


bool drag_nested_intersections = false 🔗

  • void set_drag_nested_intersections(value: bool)

  • bool is_dragging_nested_intersections()

Добавляет дополнительные перетаскиватели в месте пересечения перетаскивателей двух SplitContainer, позволяя перетаскивать оба одновременно. Для обоих SplitContainer это должно быть установлено в true, и один из них должен быть потомком другого. Они также должны быть ортогональны (их vertical различны), и потомок должен находиться рядом по крайней мере с одним из перетаскивателей предка (в пределах minimum_grab_thickness).


DraggerVisibility dragger_visibility = 0 🔗

Определяет видимость перетаскивателя. Это свойство не определяет, включено ли перетаскивание или нет. Для этого используйте dragging_enabled.


bool dragging_enabled = true 🔗

  • void set_dragging_enabled(value: bool)

  • bool is_dragging_enabled()

Включает или отключает раздельное перетаскивание.


int split_offset = 0 🔗

  • void set_split_offset(value: int)

  • int get_split_offset()

Устарело: Use split_offsets instead. The first element of the array is the split offset between the first two children.

Первый элемент split_offsets.


PackedInt32Array split_offsets = PackedInt32Array(0) 🔗

Смещение для каждого перетаскиваемого элемента в пикселях. Каждое из них представляет собой смещение разделения между узлами Control до и после перетаскиваемого элемента, при этом 0 — положение по умолчанию. Положение по умолчанию определяется флагами расширения и минимальными размерами узлов Control. См. Control.size_flags_horizontal, Control.size_flags_vertical и Control.size_flags_stretch_ratio.

Если ни один из узлов Control до перетаскиваемого элемента не расширен, положение по умолчанию будет в начале SplitContainer. Если ни один из узлов Control после перетаскиваемого элемента не расширен, положение по умолчанию будет в конце SplitContainer. Если перетаскиваемый элемент находится между расширенными узлами Control, положение по умолчанию будет посередине, исходя из Control.size_flags_stretch_ratio и минимальных размеров.

Примечание: Если смещения при разделении приводят к перекрытию узлов Control, то при определении позиций приоритет будет иметь первое разделение.

Note: The returned array is copied and any changes to it will not update the original property value. See PackedInt32Array for more details.


bool touch_dragger_enabled = false 🔗

  • void set_touch_dragger_enabled(value: bool)

  • bool is_touch_dragger_enabled()

Если true, сенсорный манипулятор перетаскивания будет включен для лучшего использования на экранах меньшего размера. В отличие от стандартного захвата, этот манипулятор перекрывает дочерние элементы SplitContainer и не влияет на их минимальное разделение. Стандартный захват больше не будет отображаться, если эта опция включена.


bool vertical = false 🔗

  • void set_vertical(value: bool)

  • bool is_vertical()

Если true, SplitContainer расположит свои дочерние элементы вертикально, а не горизонтально.

Нельзя изменить при использовании HSplitContainer и VSplitContainer.


Описания метода

void clamp_split_offset(priority_index: int = 0) 🔗

Ограничивает значения split_offsets, чтобы гарантировать, что они находятся в допустимых диапазонах и не перекрываются друг с другом. При возникновении перекрытий этот метод отдает приоритет одному смещению разделения (по индексу priority_index), ограничивая все перекрывающиеся смещения разделения этим смещением.


Control get_drag_area_control() 🔗

Устарело: Use the first element of get_drag_area_controls() instead.

Возвращает область перетаскивания Control. Например, вы можете переместить предварительно настроенную кнопку в область перетаскивания Control, чтобы она перемещалась вместе с разделительной полосой. Попробуйте установить якоря Button на center до вызова reparent().

$BarnacleButton.reparent($SplitContainer.get_drag_area_control())

Примечание: Область перетаскивания Control рисуется поверх дочерних элементов SplitContainer, поэтому объекты рисования CanvasItem, вызываемые из Control, и дочерние элементы, добавленные в Control, также будут отображаться поверх дочерних элементов SplitContainer. Попробуйте установить Control.mouse_filter пользовательских дочерних элементов на Control.MOUSE_FILTER_IGNORE, чтобы предотвратить блокировку мыши при перетаскивании, если это необходимо.

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


Array[Control] get_drag_area_controls() 🔗

Возвращает массив элементов управления Control области перетаскивания. Это интерактивные узлы Control между каждым дочерним элементом. Например, это можно использовать для добавления предварительно настроенной кнопки к элементу управления Control области перетаскивания, чтобы она располагалась рядом с разделительной полосой. Попробуйте установить привязки Button в center перед вызовом Node.reparent().

$BarnacleButton.reparent($SplitContainer.get_drag_area_controls()[0])

Примечание: Элементы управления Control области перетаскивания отображаются поверх дочерних элементов SplitContainer, поэтому CanvasItem рисует объекты, вызываемые из области перетаскивания, и дочерние элементы, добавленные к ней, также будут отображаться поверх дочерних элементов SplitContainer. Попробуйте установить для элемента Control.mouse_filter пользовательских дочерних элементов значение Control.MOUSE_FILTER_IGNORE, чтобы предотвратить блокировку перетаскивания мыши, если это необходимо.

Предупреждение: Это необходимые внутренние узлы, их удаление или освобождение может привести к сбою.


Описания свойств темы

Color touch_dragger_color = Color(1, 1, 1, 0.3) 🔗

Цвет сенсорного перетаскивателя.


Color touch_dragger_hover_color = Color(1, 1, 1, 0.6) 🔗

Цвет сенсорного ползунка при наведении курсора.


Color touch_dragger_pressed_color = Color(1, 1, 1, 1) 🔗

Цвет сенсорного ползунка при нажатии.


int autohide = 1 🔗

Логическое Bool значение. Если 1 (true), элементы захвата будут автоматически скрываться, когда они не находятся под курсором. Если 0 (false), элементы захвата всегда видны. dragger_visibility должен быть DRAGGER_VISIBLE.


int minimum_grab_thickness = 6 🔗

Минимальная толщина области, на которую пользователи могут щелкнуть, чтобы захватить разделительную полосу. Это гарантирует, что разделительную полосу можно будет перетаскивать, даже если размер separation или h_grabber / v_grabber слишком мал для удобного выбора.


int separation = 12 🔗

Толщина разделительной полосы, то есть расстояние между каждым дочерним элементом контейнера. Это значение переопределяется размером значка захвата, если dragger_visibility установлено в DRAGGER_VISIBLE или DRAGGER_HIDDEN, и separation меньше размера значка захвата по той же оси.

Примечание: Чтобы получить значения separation меньше размера значка захвата, например, 1 px тонкой линии, установите h_grabber или v_grabber в новое значение ImageTexture, что фактически устанавливает размер значка захвата равным 0 px.


Texture2D grabber 🔗

Значок, используемый для элементов захвата, отображаемых в разделителях. Он используется только в HSplitContainer и VSplitContainer. Для SplitContainer см. h_grabber и v_grabber.


Texture2D h_grabber 🔗

Значок, используемый для элементов захвата, отображаемых в разделительных линиях, когда vertical имеет значение false.


Texture2D h_touch_dragger 🔗

Значок, используемый для маркера перетаскивания, когда touch_dragger_enabled имеет значение true, а vertical имеет значение false.


Texture2D touch_dragger 🔗

Значок, используемый для ручки перетаскивания, когда touch_dragger_enabled равен true. Используется только в HSplitContainer и VSplitContainer. Для SplitContainer см. h_touch_dragger и v_touch_dragger.


Texture2D v_grabber 🔗

Значок, используемый для элементов захвата, отображаемых в разделительных линиях, когда vertical имеет значение true.


Texture2D v_touch_dragger 🔗

Значок, используемый для маркера перетаскивания, когда touch_dragger_enabled имеет значение true и vertical имеет значение true.


StyleBox split_bar_background 🔗

Определяет фон разделенной полосы, если ее толщина больше нуля.