Container
2026/4/14大约 4 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — Container
Container
节点继承关系
继承链:Node → CanvasItem → Control → Container
继承自 Control
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Size | 控件尺寸 |
| 属性 | Position | 控件位置 |
| 属性 | AnchorsPreset | 锚点预设 |
| 属性 | GrowDirection | 超出容器时的扩展方向 |
| 属性 | MouseFilter | 鼠标事件过滤(停止 / 通过 / 忽略) |
| 属性 | FocusMode | 焦点模式(无 / 单击 / 全部) |
| 信号 | gui_input | 接收到 GUI 输入事件 |
| 信号 | mouse_entered | 鼠标进入控件区域 |
| 信号 | mouse_exited | 鼠标离开控件区域 |
| 信号 | focus_entered | 获得焦点 |
| 信号 | focus_exited | 失去焦点 |
| 信号 | resized | 尺寸变化 |
| 方法 | GrabFocus() | 获取焦点 |
| 方法 | ReleaseFocus() | 释放焦点 |
| 方法 | SetAnchorsPreset() | 设置锚点预设 |
| 方法 | GetMinimumSize() | 获取最小尺寸 |
继承自 CanvasItem
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Visible | 是否可见 |
| 属性 | Modulate | 整体颜色叠加(乘法) |
| 属性 | SelfModulate | 自身颜色叠加(不影响子节点) |
| 属性 | ZIndex | 绘制层级(Z 轴排序) |
| 信号 | visibility_changed | 可见性变化时触发 |
| 方法 | GetGlobalMousePosition() | 获取鼠标全局坐标 |
继承自 Node
| 类型 | 名称 | 说明 |
|---|---|---|
| 属性 | Name | 节点名称 |
| 属性 | ProcessMode | 处理模式(始终 / 暂停时 / 仅编辑器) |
| 属性 | ProcessPriority | 处理优先级,数字越小越先执行 |
| 信号 | ready | 节点进入场景树并准备就绪 |
| 信号 | tree_entered | 节点进入场景树 |
| 信号 | tree_exited | 节点完全离开场景树 |
| 方法 | GetNode<T>() | 按路径获取子节点 |
| 方法 | AddChild() | 添加子节点 |
| 方法 | RemoveChild() | 移除子节点 |
| 方法 | QueueFree() | 帧结束后释放节点 |
| 方法 | GetParent() | 获取父节点 |
定义
Container 是所有容器的抽象基类。你不会直接使用 Container 本身,而是使用它的子类——HBoxContainer、VBoxContainer、GridContainer 等。容器节点是 UI 布局的"收纳盒"——它们不显示内容,而是负责自动排列里面的子控件。用好了容器,你就再也不用手动调整每个控件的位置了。
使用频率:★★★★ 维度专用常用(所有 UI 布局的基础,通过子类间接使用)
节点用途
- 作为所有容器的基类,提供自动布局的公共接口
- 定义子控件的排列规则
使用场景
- 不直接使用,请使用具体的子类
常用节点搭配
所有具体容器都是它的子类:
- HBoxContainer — 水平排列
- VBoxContainer — 垂直排列
- GridContainer — 网格排列
- FlowContainer — 流式排列
- CenterContainer — 居中
- MarginContainer — 边距
- ScrollContainer — 滚动
- SplitContainer — 分割
- PanelContainer — 带背景面板
- TabContainer — 标签页
- SubViewportContainer — 视口
- AspectRatioContainer — 宽高比
生效必备素材/资源
无需特殊资源。
节点属性与信号
自有属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
| (Container 没有额外属性,由子类各自定义) | — | — | — | — |
子节点的通用属性
| 属性 | 说明 |
|---|---|
Size Flags > Horizontal | 水平方向:Fill(填充)、Expand(扩展)、Shrink Begin/Center/End |
Size Flags > Vertical | 垂直方向:同上 |
Size Flags > Stretch Ratio | 在容器中占据的比例(用于多个子节点按比例分配空间) |
信号
| 信号 | 触发时机 | 参数 |
|---|---|---|
| (Container 没有特有信号) | — | — |
常用方法
| 方法 | 说明 |
|---|---|
QueueSort() | 请求重新排列子控件 |
FitChildInControl(child) | 让子控件适配容器大小 |
代码示例
C
// Container 是抽象基类,请使用具体子类
// 示例参考 HBoxContainer、VBoxContainer 等页面GDScript
# Container 是抽象基类,请使用具体子类
# 示例参考 HBoxContainer、VBoxContainer 等页面容器选型决策树
不知道该用哪个容器?按下面这个简单的思路走:
需要自动排列子控件吗?
├── 否 → 直接用 Control 或 Panel
└── 是 → 子控件需要滚动查看吗?
├── 是 → ScrollContainer(里面再套 VBoxContainer)
└── 否 → 怎么排列?
├── 水平一排 → HBoxContainer
├── 垂直一列 → VBoxContainer
├── 网格表格 → GridContainer
├── 自动换行 → HFlowContainer / VFlowContainer
├── 居中一个 → CenterContainer
├── 只加边距 → MarginContainer
├── 带背景面板 → PanelContainer
├── 标签页切换 → TabContainer
└── 可拖动分割 → HSplitContainer / VSplitContainer