NativeMenu¶
继承: Object
操作系统本机菜单的服务器接口。
描述¶
NativeMenu处理对 OS 原生全局菜单栏和弹出菜单的低级访问。
注意:这是低级 API,请考虑使用将MenuBar.prefer_global_menu设置为true的MenuBar,和将PopupMenu.prefer_native_menu设置为true的PopupMenu。
要创建菜单,请使用create_menu(),使用add_*_item方法添加菜单项。要删除菜单,请使用free_menu()。
var menu
func _menu_callback(item_id):
if item_id == "ITEM_CUT":
cut()
elif item_id == "ITEM_COPY":
copy()
elif item_id == "ITEM_PASTE":
paste()
func _enter_tree():
# 创建新菜单并添加物品:
menu = NativeMenu.create_menu()
NativeMenu.add_item(menu, "Cut", _menu_callback, Callable(), "ITEM_CUT")
NativeMenu.add_item(menu, "Copy", _menu_callback, Callable(), "ITEM_COPY")
NativeMenu.add_separator(menu)
NativeMenu.add_item(menu, "Paste", _menu_callback, Callable(), "ITEM_PASTE")
func _on_button_pressed():
# 在鼠标所在位置显示弹出菜单:
NativeMenu.popup(menu, DisplayServer.mouse_get_position())
func _exit_tree():
# 当不再需要该菜单时将其移除:
NativeMenu.free_menu(menu)
方法¶
add_check_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_icon_check_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_icon_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_icon_radio_check_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_multistate_item(rid: RID, label: String, max_states: int, default_state: int, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_radio_check_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) |
|
add_separator(rid: RID, index: int = -1) |
|
add_submenu_item(rid: RID, label: String, submenu_rid: RID, tag: Variant = null, index: int = -1) |
|
void |
|
find_item_index_with_submenu(rid: RID, submenu_rid: RID) const |
|
find_item_index_with_tag(rid: RID, tag: Variant) const |
|
find_item_index_with_text(rid: RID, text: String) const |
|
void |
|
get_item_accelerator(rid: RID, idx: int) const |
|
get_item_callback(rid: RID, idx: int) const |
|
get_item_count(rid: RID) const |
|
get_item_icon(rid: RID, idx: int) const |
|
get_item_indentation_level(rid: RID, idx: int) const |
|
get_item_key_callback(rid: RID, idx: int) const |
|
get_item_max_states(rid: RID, idx: int) const |
|
get_item_state(rid: RID, idx: int) const |
|
get_item_submenu(rid: RID, idx: int) const |
|
get_item_tag(rid: RID, idx: int) const |
|
get_item_text(rid: RID, idx: int) const |
|
get_item_tooltip(rid: RID, idx: int) const |
|
get_minimum_width(rid: RID) const |
|
get_popup_close_callback(rid: RID) const |
|
get_popup_open_callback(rid: RID) const |
|
get_system_menu(menu_id: SystemMenus) const |
|
get_system_menu_name(menu_id: SystemMenus) const |
|
has_feature(feature: Feature) const |
|
has_system_menu(menu_id: SystemMenus) const |
|
is_item_checkable(rid: RID, idx: int) const |
|
is_item_checked(rid: RID, idx: int) const |
|
is_item_disabled(rid: RID, idx: int) const |
|
is_item_hidden(rid: RID, idx: int) const |
|
is_item_radio_checkable(rid: RID, idx: int) const |
|
is_system_menu(rid: RID) const |
|
void |
|
void |
remove_item(rid: RID, idx: int) |
void |
set_interface_direction(rid: RID, is_rtl: bool) |
void |
set_item_accelerator(rid: RID, idx: int, keycode: Key) |
void |
set_item_callback(rid: RID, idx: int, callback: Callable) |
void |
set_item_checkable(rid: RID, idx: int, checkable: bool) |
void |
set_item_checked(rid: RID, idx: int, checked: bool) |
void |
set_item_disabled(rid: RID, idx: int, disabled: bool) |
void |
set_item_hidden(rid: RID, idx: int, hidden: bool) |
void |
set_item_hover_callbacks(rid: RID, idx: int, callback: Callable) |
void |
set_item_icon(rid: RID, idx: int, icon: Texture2D) |
void |
set_item_indentation_level(rid: RID, idx: int, level: int) |
void |
set_item_key_callback(rid: RID, idx: int, key_callback: Callable) |
void |
set_item_max_states(rid: RID, idx: int, max_states: int) |
void |
set_item_radio_checkable(rid: RID, idx: int, checkable: bool) |
void |
set_item_state(rid: RID, idx: int, state: int) |
void |
set_item_submenu(rid: RID, idx: int, submenu_rid: RID) |
void |
set_item_tag(rid: RID, idx: int, tag: Variant) |
void |
set_item_text(rid: RID, idx: int, text: String) |
void |
set_item_tooltip(rid: RID, idx: int, tooltip: String) |
void |
set_minimum_width(rid: RID, width: float) |
void |
set_popup_close_callback(rid: RID, callback: Callable) |
void |
set_popup_open_callback(rid: RID, callback: Callable) |
枚举¶
enum Feature: 🔗
Feature FEATURE_GLOBAL_MENU = 0
NativeMenu支持原生全局主菜单。
Feature FEATURE_POPUP_MENU = 1
NativeMenu支持原生弹出菜单。
Feature FEATURE_OPEN_CLOSE_CALLBACK = 2
NativeMenu支持菜单打开和关闭回调。
Feature FEATURE_HOVER_CALLBACK = 3
NativeMenu支持菜单项悬停回调。
Feature FEATURE_KEY_CALLBACK = 4
NativeMenu支持菜单项加速器/键回调。
enum SystemMenus: 🔗
SystemMenus INVALID_MENU_ID = 0
无效的特殊系统菜单ID。
SystemMenus MAIN_MENU_ID = 1
全局主菜单ID。
SystemMenus APPLICATION_MENU_ID = 2
应用程序(macOS上“Apple”菜单之后的第一个菜单)菜单ID。
SystemMenus WINDOW_MENU_ID = 3
“窗口”菜单ID(在macOS上,此菜单包括标准窗口控制项和打开窗口列表)。
SystemMenus HELP_MENU_ID = 4
“帮助”菜单ID(在macOS上,此菜单包括帮助搜索栏)。
SystemMenus DOCK_MENU_ID = 5
Dock图标右键单击菜单ID(在macOS上,此菜单包括标准应用程序控制项和打开窗口列表)。
方法说明¶
int add_check_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
添加一个新的带有文本label的可检查项到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_icon_check_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label和图标icon的新可检查项添加到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_icon_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label和图标icon的新项目添加到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_icon_radio_check_item(rid: RID, icon: Texture2D, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label和图标icon的新单选可检查项添加到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:单选可检查项目仅显示复选标记,但没有任何内置检查行为,必须手动检查/取消检查。有关如何控制它的更多信息,请参阅set_item_checked()。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label的新项目添加到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_multistate_item(rid: RID, label: String, max_states: int, default_state: int, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label的新项目添加到全局菜单rid。
与普通的二进制项目相反,多状态项目可以有两个以上的状态,由max_states定义。每次按下或激活项目都会增加一个状态。默认值由default_state定义。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:默认情况下,没有指示当前项目状态,应该手动更改。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_radio_check_item(rid: RID, label: String, callback: Callable = Callable(), key_callback: Callable = Callable(), tag: Variant = null, accelerator: Key = 0, index: int = -1) 🔗
将带有文本label的新单选可检查项添加到全局菜单rid。
返回插入项的索引,不保证与index值相同。
可以选择定义accelerator,这是一个键盘快捷键,即使它当前没有打开,也可以按下它来触发菜单按钮。accelerator通常是KeyModifierMask和Key的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:单选可检查项目仅显示复选标记,但没有任何内置检查行为,必须手动检查/取消检查。有关如何控制它的更多信息,请参阅set_item_checked()。
注意:callback和key_callbackCallables需要只接受一个Variant参数,传递给Callables的参数将是传递给tag的值。
注意:此方法在macOS和Windows上实现。
注意:在Windows上,accelerator和key_callback被忽略。
int add_separator(rid: RID, index: int = -1) 🔗
将项目之间的分隔符添加到全局菜单rid。分隔符还占用索引。
返回插入项的索引,不保证与index值相同。
注意:此方法在macOS和Windows上实现。
int add_submenu_item(rid: RID, label: String, submenu_rid: RID, tag: Variant = null, index: int = -1) 🔗
添加将作为全局菜单rid的子菜单的项目。submenu_rid参数是单击项目时将显示的全局菜单的RID。
返回插入项的索引,不保证与index值相同。
注意:此方法在macOS和Windows上实现。
从全局菜单rid中删除所有项目。
注意:此方法在macOS和Windows上实现。
创建一个新的全局菜单对象。
注意:此方法在macOS和Windows上实现。
int find_item_index_with_submenu(rid: RID, submenu_rid: RID) const 🔗
返回具有submenu_rid指定的子菜单的项目的索引。索引由引擎自动分配给每个项目,不能手动设置。
注意:此方法在macOS和Windows上实现。
int find_item_index_with_tag(rid: RID, tag: Variant) const 🔗
返回具有指定tag的项目的索引。索引由引擎自动分配给每个项目,不能手动设置。
注意:此方法在macOS和Windows上实现。
int find_item_index_with_text(rid: RID, text: String) const 🔗
返回具有指定text的项目的索引。索引由引擎自动分配给每个项目,不能手动设置。
注意:此方法在macOS和Windows上实现。
释放由thisNativeMenu创建的全局菜单对象。
注意:此方法在macOS和Windows上实现。
Key get_item_accelerator(rid: RID, idx: int) const 🔗
返回索引idx处项目的加速器。加速器是激活项目的键的特殊组合,无论哪个控件被聚焦。
注意:此方法仅在macOS上实现。
Callable get_item_callback(rid: RID, idx: int) const 🔗
返回indexidx处项目的回调。
注意:此方法在macOS和Windows上实现。
int get_item_count(rid: RID) const 🔗
返回全局菜单rid中的项目数。
注意:此方法在macOS和Windows上实现。
Texture2D get_item_icon(rid: RID, idx: int) const 🔗
返回索引idx处项目的图标。
注意:此方法在macOS和Windows上实现。
int get_item_indentation_level(rid: RID, idx: int) const 🔗
返回给定idx处项目的水平偏移量。
注意:此方法仅在macOS上实现。
Callable get_item_key_callback(rid: RID, idx: int) const 🔗
返回索引idx处项目加速器的回调。
注意:此方法仅在macOS上实现。
int get_item_max_states(rid: RID, idx: int) const 🔗
返回多状态项的状态数。有关详细信息,请参见add_multistate_item()。
注意:此方法在macOS和Windows上实现。
int get_item_state(rid: RID, idx: int) const 🔗
返回多状态项的状态。有关详细信息,请参见add_multistate_item()。
注意:此方法在macOS和Windows上实现。
RID get_item_submenu(rid: RID, idx: int) const 🔗
返回索引idx处项目的子菜单ID。有关如何添加子菜单的更多信息,请参见add_submenu_item()。
注意:此方法在macOS和Windows上实现。
Variant get_item_tag(rid: RID, idx: int) const 🔗
返回指定项的元数据,可以是任何类型。您可以使用set_item_tag()进行设置,它提供了一种将上下文数据分配给项的简单方法。
注意:此方法在macOS和Windows上实现。
String get_item_text(rid: RID, idx: int) const 🔗
返回索引idx处项目的文本。
注意:此方法在macOS和Windows上实现。
String get_item_tooltip(rid: RID, idx: int) const 🔗
返回与指定索引idx关联的工具提示。
注意:此方法仅在macOS上实现。
float get_minimum_width(rid: RID) const 🔗
返回全局菜单最小宽度。
注意:此方法仅在macOS上实现。
Callable get_popup_close_callback(rid: RID) const 🔗
返回全局菜单关闭回调。
注意:此方法在macOS和Windows上实现。
Callable get_popup_open_callback(rid: RID) const 🔗
返回全局菜单打开回调。
注意:此方法仅在macOS上实现。
Vector2 get_size(rid: RID) const 🔗
返回全局菜单大小。
注意:此方法在macOS和Windows上实现。
RID get_system_menu(menu_id: SystemMenus) const 🔗
返回特殊系统菜单的RID。
注意:此方法仅在macOS上实现。
String get_system_menu_name(menu_id: SystemMenus) const 🔗
返回特殊系统菜单的可读名称。
注意:此方法仅在macOS上实现。
bool has_feature(feature: Feature) const 🔗
如果当前NativeMenu支持指定的feature,则返回true,否则返回false。
注意:此方法在macOS和Windows上实现。
bool has_menu(rid: RID) const 🔗
如果rid是有效的全局菜单,则返回true。
注意:此方法在macOS和Windows上实现。
bool has_system_menu(menu_id: SystemMenus) const 🔗
如果支持特殊的系统菜单,则返回true。
注意:此方法仅在macOS上实现。
bool is_item_checkable(rid: RID, idx: int) const 🔗
如果索引idx处的项目以某种方式可检查,即如果它有复选框或单选按钮,则返回true。
注意:此方法在macOS和Windows上实现。
bool is_item_checked(rid: RID, idx: int) const 🔗
如果选中索引idx处的项目,则返回true。
注意:此方法在macOS和Windows上实现。
bool is_item_disabled(rid: RID, idx: int) const 🔗
如果索引idx处的项目被禁用,则返回true。当它被禁用时,它无法被选中,或者它的操作被调用。
有关如何禁用项目的更多信息,请参见set_item_disabled()。
注意:此方法在macOS和Windows上实现。
bool is_item_hidden(rid: RID, idx: int) const 🔗
如果索引idx处的项目被隐藏,则返回true。
有关如何隐藏项目的更多信息,请参见set_item_hidden()。
注意:此方法仅在macOS上实现。
bool is_item_radio_checkable(rid: RID, idx: int) const 🔗
如果索引idx处的项目具有单选按钮样式的可检查性,则返回true。
注意:这纯粹是装饰性的;您必须添加检查/取消检查无线电组中的项目的逻辑。
注意:此方法在macOS和Windows上实现。
bool is_opened(rid: RID) const 🔗
如果菜单当前打开,则返回true。
注意:此方法仅在macOS上实现。
bool is_system_menu(rid: RID) const 🔗
返回trueis全局菜单是一个特殊的系统菜单。
注意:此方法仅在macOS上实现。
void popup(rid: RID, position: Vector2i) 🔗
在屏幕坐标的position处显示全局菜单。
注意:此方法在macOS和Windows上实现。
void remove_item(rid: RID, idx: int) 🔗
从全局菜单rid中删除indexidx处的项目。
注意:删除项目后的项目索引将移位1。
注意:此方法在macOS和Windows上实现。
void set_interface_direction(rid: RID, is_rtl: bool) 🔗
如果is_rtl为true,则从右到左设置菜单文本布局方向。
注意:此方法在macOS和Windows上实现。
void set_item_accelerator(rid: RID, idx: int, keycode: Key) 🔗
keycode可以是单个Key,也可以是KeyModifierMasks和Keys的组合,使用按位或,例如KEY_MASK_CTRL|KEY_A(Ctrl+A)。
注意:此方法仅在macOS上实现。
void set_item_callback(rid: RID, idx: int, callback: Callable) 🔗
在indexidx处设置项目的回调。按下项目时会发出回调。
注意:callbackCallable需要只接受一个Variant参数,传递给Callable的参数将是创建菜单项时传递给tag参数的值。
注意:此方法在macOS和Windows上实现。
void set_item_checkable(rid: RID, idx: int, checkable: bool) 🔗
设置indexidx处的项目是否有复选框。如果false,则将项目的类型设置为纯文本。
注意:此方法在macOS和Windows上实现。
void set_item_checked(rid: RID, idx: int, checked: bool) 🔗
在indexidx处设置项目的检查状态。
注意:此方法在macOS和Windows上实现。
void set_item_disabled(rid: RID, idx: int, disabled: bool) 🔗
启用/禁用indexidx处的项目。禁用时,无法选择它,也无法调用它的操作。
注意:此方法在macOS和Windows上实现。
void set_item_hidden(rid: RID, idx: int, hidden: bool) 🔗
隐藏/显示索引idx处的项目。当它被隐藏时,项目不会出现在菜单中,并且无法调用其操作。
注意:此方法仅在macOS上实现。
void set_item_hover_callbacks(rid: RID, idx: int, callback: Callable) 🔗
在indexidx处设置项目的回调。当项目悬停时发出回调。
注意:callbackCallable需要只接受一个Variant参数,传递给Callable的参数将是创建菜单项时传递给tag参数的值。
注意:此方法仅在macOS上实现。
void set_item_icon(rid: RID, idx: int, icon: Texture2D) 🔗
替换指定idx的Texture2D图标。
注意:此方法在macOS和Windows上实现。
注意:macOS Dock菜单项不支持此方法。
void set_item_indentation_level(rid: RID, idx: int, level: int) 🔗
设置给定idx处项目的水平偏移量。
注意:此方法仅在macOS上实现。
void set_item_key_callback(rid: RID, idx: int, key_callback: Callable) 🔗
在indexidx处设置项目的回调。当其加速器被激活时发出回调。
注意:key_callbackCallable需要只接受一个Variant参数,传递给Callable的参数将是创建菜单项时传递给tag参数的值。
注意:此方法仅在macOS上实现。
void set_item_max_states(rid: RID, idx: int, max_states: int) 🔗
设置多状态项的状态数。有关详细信息,请参见add_multistate_item()。
注意:此方法在macOS和Windows上实现。
void set_item_radio_checkable(rid: RID, idx: int, checkable: bool) 🔗
将指定索引idx处的项目类型设置为单选按钮。如果false,则将项目类型设置为纯文本。
注意:这纯粹是装饰性的;您必须添加检查/取消检查无线电组中的项目的逻辑。
注意:此方法在macOS和Windows上实现。
void set_item_state(rid: RID, idx: int, state: int) 🔗
设置多状态项的状态。有关详细信息,请参见add_multistate_item()。
注意:此方法在macOS和Windows上实现。
void set_item_submenu(rid: RID, idx: int, submenu_rid: RID) 🔗
在indexidx处设置项目的子菜单RID。子菜单是单击项目时显示的全局菜单。
注意:此方法在macOS和Windows上实现。
void set_item_tag(rid: RID, idx: int, tag: Variant) 🔗
设置项目的元数据,可以是任何类型。您可以稍后使用get_item_tag()获取它,它提供了一种将上下文数据分配给项目的简单方法。
注意:此方法在macOS和Windows上实现。
void set_item_text(rid: RID, idx: int, text: String) 🔗
在indexidx处设置项目的文本。
注意:此方法在macOS和Windows上实现。
void set_item_tooltip(rid: RID, idx: int, tooltip: String) 🔗
在指定索引idx处设置项目的String工具提示。
注意:此方法仅在macOS上实现。
void set_minimum_width(rid: RID, width: float) 🔗
设置全局菜单的最小宽度。
注意:此方法仅在macOS上实现。
void set_popup_close_callback(rid: RID, callback: Callable) 🔗
寄存器可调用以在菜单即将显示时发出。
注意:操作系统可以模拟菜单打开来跟踪菜单项变化和全局快捷方式,在这种情况下不触发相应的关闭回调。使用is_opened()检查菜单当前是否打开。
注意:此方法在macOS和Windows上实现。
void set_popup_open_callback(rid: RID, callback: Callable) 🔗
可调用的寄存器在菜单关闭后发出。
注意:此方法仅在macOS上实现。