MenuButton
2026/4/14大约 2 分钟
最后同步日期:2026-04-15 | Godot 官方原文 — MenuButton
MenuButton
节点继承关系
继承链:Node → CanvasItem → Control → BaseButton → MenuButton
定义
点击后弹出一个下拉菜单,菜单项需要在代码中添加。就像很多软件顶部的"文件 > 新建/打开/保存"那种按钮。
使用频率:★★ 偶尔使用(需要下拉菜单时使用)
节点用途
- 创建下拉菜单(文件菜单、编辑菜单等)
- 提供多选项的快速访问
使用场景
- 游戏编辑器的菜单栏
- 设置界面的分类菜单
常用节点搭配
- 搭配
HBoxContainer做菜单栏 - 搭配
PopupMenu信号处理菜单项点击
生效必备素材/资源
无需特殊资源。菜单项在代码中动态添加。
节点属性与信号
自有属性
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
text | string | "" | — | 按钮上显示的文字 |
flat | bool | false | — | 是否为扁平样式 |
继承自 BaseButton
| 属性 | 类型 | 默认值 | 继承自 | 说明 |
|---|---|---|---|---|
disabled | bool | false | BaseButton | 是否禁用 |
信号
| 信号 | 触发时机 | 参数 |
|---|---|---|
pressed | 按钮被点击时 | 无 |
常用方法
| 方法 | 说明 |
|---|---|
GetPopup() | 获取弹出的 PopupMenu 子节点 |
GetPopup().AddItem("选项名", id) | 添加一个菜单项 |
GetPopup().AddSeparator() | 添加分隔线 |
GetPopup().RemoveItem(index) | 移除指定菜单项 |
GetPopup().Clear() | 清空所有菜单项 |
代码示例
C
using Godot;
public partial class MenuButtonDemo : Control
{
public override void _Ready()
{
var menuBtn = new MenuButton();
menuBtn.Text = "文件";
menuBtn.Position = new Vector2(50, 10);
// 添加菜单项
var popup = menuBtn.GetPopup();
popup.AddItem("新建", 0);
popup.AddItem("打开", 1);
popup.AddItem("保存", 2);
popup.AddSeparator(); // 分隔线
popup.AddItem("退出", 3);
// 监听菜单项点击
popup.IdPressed += (id) =>
{
GD.Print($"选择了菜单项 ID: {id}");
};
AddChild(menuBtn);
}
}GDScript
extends Control
func _ready():
var menu_btn = MenuButton.new()
menu_btn.text = "文件"
menu_btn.position = Vector2(50, 10)
# 添加菜单项
var popup = menu_btn.get_popup()
popup.add_item("新建", 0)
popup.add_item("打开", 1)
popup.add_item("保存", 2)
popup.add_separator() # 分隔线
popup.add_item("退出", 3)
# 监听菜单项点击
popup.id_pressed.connect(func(id: int):
print("选择了菜单项 ID: " + str(id))
)
add_child(menu_btn)