Control¶
继承: CanvasItem < Item < Object
派生: BaseButton, ColorRect, Container, GraphEdit, ItemList, Label, LineEdit, MenuBar, NinePatchRect, Panel, Range, ReferenceRect, RichTextLabel, Separator, TabBar, TextEdit, TextureRect, Tree, VideoStreamPlayer
所有GUI控件的基类。根据其父控件调整其位置和大小。
描述¶
所有与用户界面相关的节点的基类。Control具有一个边界矩形,用于定义其范围、相对于其父控件或当前视口的锚点位置以及相对于锚点的偏移量。当节点、其任何父节点或屏幕大小发生变化时,偏移量会自动更新。
属性¶
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
physics_interpolation_mode |
|
|
|
||
|
||
|
||
|
||
|
||
BitField[SizeFlags] |
|
|
|
||
BitField[SizeFlags] |
|
|
|
||
|
||
|
方法¶
信号¶
focus_entered() 🔗
当节点获得焦点时发出。
focus_exited() 🔗
当节点失去焦点时发出。
gui_input(event: InputEvent) 🔗
当节点收到InputEvent时发出。
minimum_size_changed() 🔗
当节点的最小大小发生变化时发出。
mouse_entered() 🔗
当鼠标光标进入控件(或任何子控件)的可见区域时发出,该区域未被其他控件或窗口遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否聚焦。
注意:CanvasItem.z_index不影响哪个控件接收信号。
mouse_exited() 🔗
当鼠标光标离开控件(和所有子控件)的可见区域时发出,该区域未被其他控件或Windows遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否被聚焦。
注意:CanvasItem.z_index不影响哪个控件接收信号。
注意:如果您想检查鼠标是否真正离开了该区域,忽略任何顶部节点,您可以使用如下代码:
func _on_mouse_exited():
if not Rect2(Vector2(), size).has_point(get_local_mouse_position()):
# 不悬停在区域上
resized() 🔗
当控件改变大小时发出。
size_flags_changed() 🔗
当其中一个大小标志更改时发出。请参阅size_flags_horizontal和size_flags_vertical。
theme_changed() 🔗
发送NOTIFICATION_THEME_CHANGED通知时发出。
枚举¶
enum FocusMode: 🔗
FocusMode FOCUS_NONE = 0
节点无法获取焦点。与focus_mode一起使用。
FocusMode FOCUS_CLICK = 1
该节点只能在鼠标点击时获取焦点。与focus_mode一起使用。
FocusMode FOCUS_ALL = 2
该节点可以通过鼠标点击、使用键盘上的箭头和Tab键或使用游戏控制器上的D-pad按钮来获取焦点。与focus_mode一起使用。
enum CursorShape: 🔗
CursorShape CURSOR_ARROW = 0
当用户悬停节点时显示系统的箭头鼠标光标。与mouse_default_cursor_shape一起使用。
CursorShape CURSOR_IBEAM = 1
当用户悬停节点时显示系统的I光束鼠标光标。I光束指针的形状类似于“I”。它告诉用户他们可以突出显示或插入文本。
CursorShape CURSOR_POINTING_HAND = 2
当用户悬停在节点上时,显示系统指向的鼠标光标。
CursorShape CURSOR_CROSS = 3
当用户悬停节点时,显示系统的交叉鼠标光标。
CursorShape CURSOR_WAIT = 4
当用户悬停节点时显示系统的等待鼠标光标。通常是沙漏。
CursorShape CURSOR_BUSY = 5
当用户悬停在节点上时显示系统繁忙的鼠标光标。通常是带有小沙漏的箭头。
CursorShape CURSOR_DRAG = 6
当用户悬停在节点上时,显示系统的拖动鼠标光标,通常是握紧的拳头或十字符号。它告诉用户他们当前正在拖动一个项目,就像场景停靠区中的一个节点。
CursorShape CURSOR_CAN_DROP = 7
当用户悬停在节点上时显示系统的拖放鼠标光标。它可以是一只张开的手。它告诉用户他们可以删除他们当前正在抓取的项目,例如场景停靠区中的节点。
CursorShape CURSOR_FORBIDDEN = 8
当用户悬停节点时显示系统禁止的鼠标光标。通常是一个交叉的圆圈。
CursorShape CURSOR_VSIZE = 9
当用户悬停节点时显示系统的垂直调整大小鼠标光标。双头垂直箭头。它告诉用户他们可以垂直调整窗口或面板的大小。
CursorShape CURSOR_HSIZE = 10
当用户悬停节点时显示系统的水平调整大小鼠标光标。双头水平箭头。它告诉用户他们可以水平调整窗口或面板的大小。
CursorShape CURSOR_BDIAGSIZE = 11
当用户悬停在节点上时,显示系统的窗口调整大小鼠标光标。光标是一个从左下角到右上角的双头箭头。它告诉用户他们可以水平和垂直调整窗口或面板的大小。
CursorShape CURSOR_FDIAGSIZE = 12
当用户悬停在节点上时,显示系统的窗口调整大小鼠标光标。光标是一个从左上角到右下角的双头箭头,与CURSOR_BDIAGSIZE相反。它告诉用户他们可以水平和垂直调整窗口或面板的大小。
CursorShape CURSOR_MOVE = 13
当用户悬停节点时显示系统的移动鼠标光标。它以90度角显示2个双头箭头。它告诉用户他们可以自由移动UI元素。
CursorShape CURSOR_VSPLIT = 14
当用户悬停在节点上时,显示系统的垂直分割鼠标光标。在Windows上,它与CURSOR_VSIZE相同。
CursorShape CURSOR_HSPLIT = 15
当用户悬停在节点上时,显示系统的水平拆分鼠标光标。在Windows上,它与CURSOR_HSIZE相同。
CursorShape CURSOR_HELP = 16
当用户悬停节点时显示系统的帮助鼠标光标,一个问号。
enum LayoutPreset: 🔗
LayoutPreset PRESET_TOP_LEFT = 0
将所有4个锚点捕捉到父控件边界的左上角。与set_anchors_preset()一起使用。
LayoutPreset PRESET_TOP_RIGHT = 1
将所有4个锚点捕捉到父控件边界的右上角。与set_anchors_preset()一起使用。
LayoutPreset PRESET_BOTTOM_LEFT = 2
将所有4个锚点捕捉到父控件边界的左下角。与set_anchors_preset()一起使用。
LayoutPreset PRESET_BOTTOM_RIGHT = 3
将所有4个锚点捕捉到父控件边界的右下角。与set_anchors_preset()一起使用。
LayoutPreset PRESET_CENTER_LEFT = 4
将所有4个锚点捕捉到父控件边界左边缘的中心。与set_anchors_preset()一起使用。
LayoutPreset PRESET_CENTER_TOP = 5
将所有4个锚点捕捉到父控件边界上边缘的中心。与set_anchors_preset()一起使用。
LayoutPreset PRESET_CENTER_RIGHT = 6
将所有4个锚点捕捉到父控件边界右边缘的中心。与set_anchors_preset()一起使用。
LayoutPreset PRESET_CENTER_BOTTOM = 7
将所有4个锚点捕捉到父控件边界底部边缘的中心。与set_anchors_preset()一起使用。
LayoutPreset PRESET_CENTER = 8
将所有4个锚点捕捉到父控件边界的中心。与set_anchors_preset()一起使用。
LayoutPreset PRESET_LEFT_WIDE = 9
将所有4个锚点捕捉到父控件的左边缘。左偏移量变为相对于左边缘的偏移量,顶部偏移量变为相对于节点父控件左上角的偏移量。与set_anchors_preset()一起使用。
LayoutPreset PRESET_TOP_WIDE = 10
将所有4个锚点捕捉到父控件的上边缘。左偏移量变为相对于左上角的偏移量,顶部偏移量变为相对于上边缘的偏移量,右侧偏移量变为相对于节点父控件右上角的偏移量。与set_anchors_preset()一起使用。
LayoutPreset PRESET_RIGHT_WIDE = 11
将所有4个锚点捕捉到父控件的右边缘。右偏移量变为相对于右边缘的偏移量,顶部偏移量变为相对于节点父控件右上角的偏移量。与set_anchors_preset()一起使用。
LayoutPreset PRESET_BOTTOM_WIDE = 12
将所有4个锚点捕捉到父控件的底部边缘。左偏移量变为相对于左下角的偏移量,底部偏移量变为相对于底部边缘的偏移量,右偏移量变为相对于节点父控件的右下角的偏移量。与set_anchors_preset()一起使用。
LayoutPreset PRESET_VCENTER_WIDE = 13
将所有4个锚点捕捉到将父控件切成两半的垂直线上。与set_anchors_preset()一起使用。
LayoutPreset PRESET_HCENTER_WIDE = 14
将所有4个锚点捕捉到将父控件切成两半的水平线上。与set_anchors_preset()一起使用。
LayoutPreset PRESET_FULL_RECT = 15
将所有4个锚点捕捉到父控件的相应角落。应用此预设后,将所有4个偏移量设置为0,Control将适合其父控件。与set_anchors_preset()一起使用。
enum LayoutPresetMode: 🔗
LayoutPresetMode PRESET_MODE_MINSIZE = 0
控件将调整为其最小大小。
LayoutPresetMode PRESET_MODE_KEEP_WIDTH = 1
控件的宽度不会改变。
LayoutPresetMode PRESET_MODE_KEEP_HEIGHT = 2
控件的高度不会改变。
LayoutPresetMode PRESET_MODE_KEEP_SIZE = 3
控件的大小不会改变。
flags SizeFlags: 🔗
SizeFlags SIZE_SHRINK_BEGIN = 0
告诉父级Container将节点与其开始对齐,无论是在顶部还是左侧边缘。它与SIZE_FILL和其他收缩大小标志互斥,但在某些容器中可以与SIZE_EXPAND一起使用。与size_flags_horizontal和size_flags_vertical一起使用。
注意:设置此标志等于没有任何大小的标志。
SizeFlags SIZE_FILL = 1
告诉父节点Container扩展此节点的边界以填充所有可用空间,而不推送任何其他节点。它与缩小大小标志互斥。与size_flags_horizontal和size_flags_vertical一起使用。
SizeFlags SIZE_EXPAND = 2
告诉父节点Container让此节点占用您标记的轴上的所有可用空间。如果多个相邻节点设置为扩展,它们将根据其拉伸比共享空间。请参阅size_flags_stretch_ratio。与size_flags_horizontal和size_flags_vertical一起使用。
SizeFlags SIZE_EXPAND_FILL = 3
将节点的大小标志设置为填充和展开。有关详细信息,请参阅SIZE_FILL和SIZE_EXPAND。
SizeFlags SIZE_SHRINK_CENTER = 4
告诉父Container将节点放在可用空间的中心。它与SIZE_FILL和其他收缩大小标志互斥,但在某些容器中可以与SIZE_EXPAND一起使用。与size_flags_horizontal和size_flags_vertical一起使用。
SizeFlags SIZE_SHRINK_END = 8
告诉父级Container将节点与其末端对齐,无论是底部还是右边缘。它与SIZE_FILL和其他收缩大小标志互斥,但在某些容器中可以与SIZE_EXPAND一起使用。与size_flags_horizontal和size_flags_vertical一起使用。
enum MouseFilter: 🔗
MouseFilter MOUSE_FILTER_STOP = 0
如果通过_gui_input()单击,控件将接收鼠标移动输入事件和鼠标按钮输入事件。控件还将接收mouse_entered和mouse_exited信号。这些事件被自动标记为已处理,它们不会进一步传播到其他控件。这也会导致其他控件中的阻塞信号。
MouseFilter MOUSE_FILTER_PASS = 1
如果通过_gui_input()单击,控件将接收鼠标移动输入事件和鼠标按钮输入事件。控件还将接收mouse_entered和mouse_exited信号。
如果此控件不处理该事件,则该事件将传播到其父控件(如果它有父控件)。该事件在节点层次结构中向上冒泡,直到它到达非CanvasItem、具有MOUSE_FILTER_STOP的控件或启用了CanvasItem.top_level的CanvasItem。这将允许在它到达的所有控件中触发信号。如果没有控件处理它,则该事件将传递给Item.shortcut_input()进行进一步处理。
MouseFilter MOUSE_FILTER_IGNORE = 2
控件不会通过_gui_input()接收任何鼠标移动输入事件或鼠标按钮输入事件。控件也不会接收mouse_entered或mouse_exited信号。这不会阻止其他控件接收这些事件或触发信号。忽略的事件不会自动处理。如果子控件有MOUSE_FILTER_PASS并且事件已传递给该控件,则该事件将进一步传播到控件的父控件。
注意:如果控件收到了mouse_entered但没有收到mouse_exited,将mouse_filter改为MOUSE_FILTER_IGNORE将导致mouse_exited发出。
enum GrowDirection: 🔗
GrowDirection GROW_DIRECTION_BEGIN = 0
如果控件的最小大小更改为大于相应轴上的当前大小,则控件将向左或顶部增长以弥补。
GrowDirection GROW_DIRECTION_END = 1
如果控件的最小大小更改为大于相应轴上的当前大小,则控件将向右或底部增长以弥补。
GrowDirection GROW_DIRECTION_BOTH = 2
如果控件的最小大小更改为大于当前大小,则控件将在两个方向上平均增长以弥补。
enum Anchor: 🔗
Anchor ANCHOR_BEGIN = 0
将4个锚点的边之一捕捉到节点的Rect的原点,位于左上角。将它与anchor_*成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset()。
Anchor ANCHOR_END = 1
将4个锚点的一侧捕捉到节点右下角的Rect的末尾。将其与anchor_*成员变量之一一起使用,例如anchor_left。要一次更改所有4个锚点,请使用set_anchors_preset()。
enum LayoutDirection: 🔗
LayoutDirection LAYOUT_DIRECTION_INHERITED = 0
自动布局方向,由父控件布局方向确定。
LayoutDirection LAYOUT_DIRECTION_APPLICATION_LOCALE = 1
自动布局方向,从当前区域设置确定。从右到左的布局方向自动用于阿拉伯语和希伯来语等需要它的语言,但仅当为给定语言加载了有效的翻译文件时(除非所述语言在ProjectSettings.internationalization/locale/fallback中配置为回退)。对于所有其他语言(或者如果i3D没有找到有效的翻译文件),使用从左到右的布局方向。如果使用TextServerFallback(ProjectSettings.internationalization/rendering/text_driver),无论语言如何,始终使用从左到右的布局方向。从右到左的布局方向也可以使用ProjectSettings.internationalization/rendering/force_right_to_left_layout_direction强制。
LayoutDirection LAYOUT_DIRECTION_LTR = 2
从左到右布局方向。
LayoutDirection LAYOUT_DIRECTION_RTL = 3
从右到左的布局方向。
LayoutDirection LAYOUT_DIRECTION_SYSTEM_LOCALE = 4
自动布局方向,由系统区域设置确定。从右到左的布局方向自动用于需要它的语言,如阿拉伯语和希伯来语,但只有当为给定语言加载了有效的翻译文件时…对于所有其他语言(或者如果i3D没有找到有效的翻译文件),使用从左到右的布局方向。如果使用TextServerFallback(ProjectSettings.internationalization/rendering/text_driver),无论语言如何,始终使用从左到右的布局方向。
LayoutDirection LAYOUT_DIRECTION_MAX = 5
表示LayoutDirection枚举的大小。
LayoutDirection LAYOUT_DIRECTION_LOCALE = 1
已弃用: 请改用 LAYOUT_DIRECTION_APPLICATION_LOCALE。
enum TextDirection: 🔗
TextDirection TEXT_DIRECTION_INHERITED = 3
文本书写方向与布局方向相同。
TextDirection TEXT_DIRECTION_AUTO = 0
自动文本书写方向,根据当前语言环境和文本内容确定。
TextDirection TEXT_DIRECTION_LTR = 1
从左到右的文本书写方向。
TextDirection TEXT_DIRECTION_RTL = 2
从右到左的文本书写方向。
常量¶
NOTIFICATION_RESIZED = 40 🔗
节点更改大小时发送。使用size获取新大小。
NOTIFICATION_MOUSE_ENTER = 41 🔗
当鼠标光标进入控件(或任何子控件)的可见区域时发送,该区域未被其他控件或窗口遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否聚焦。
注意:CanvasItem.z_index不影响哪个控件接收通知。
另见NOTIFICATION_MOUSE_ENTER_SELF。
NOTIFICATION_MOUSE_EXIT = 42 🔗
当鼠标光标离开控件(和所有子控件)的可见区域时发送,该区域未被其他控件或窗口遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否聚焦。
注意:CanvasItem.z_index不影响哪个控件接收通知。
另见NOTIFICATION_MOUSE_EXIT_SELF。
NOTIFICATION_MOUSE_ENTER_SELF = 60 🔗
实验性: 发送该通知的原因将来可能会发生变化。
当鼠标光标进入控件的可见区域时发送,该区域未被其他控件或Windows遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否聚焦。
注意:CanvasItem.z_index不影响哪个控件接收通知。
NOTIFICATION_MOUSE_EXIT_SELF = 61 🔗
实验性: 发送该通知的原因将来可能会发生变化。
当鼠标光标离开控件的可见区域时发送,该区域未被其他控件或Windows遮挡,前提是其mouse_filter允许事件到达它,并且无论它当前是否聚焦。
注意:CanvasItem.z_index不影响哪个控件接收通知。
NOTIFICATION_FOCUS_ENTER = 43 🔗
节点获取焦点时发送。
NOTIFICATION_FOCUS_EXIT = 44 🔗
节点失去焦点时发送。
NOTIFICATION_THEME_CHANGED = 45 🔗
当节点需要刷新其主题项时发送。这发生在以下情况之一:
-此节点或其任何祖先上的 theme属性已更改。
-此节点上的 theme_type_variation属性已更改。
-节点的主题属性覆盖之一已更改。
-节点进入场景树。
注意:作为优化,当此节点在场景树之外时,不会从发生的更改中发送此通知。
注意:此通知与Item.NOTIFICATION_ENTER_TREE一起接收。因此如果您正在实例化一个场景,子节点还不会被初始化。您可以使用它来设置此节点的主题、从脚本创建的子节点,或者如果您想访问编辑器中添加的子节点,请使用Item.is_node_ready()确保节点已准备就绪。
func _notification(what):
if what == NOTIFICATION_THEME_CHANGED:
if not is_node_ready():
await start # 待就绪信号。
$Label.add_theme_color_override("font_color", Color.YELLOW)
NOTIFICATION_SCROLL_BEGIN = 47 🔗
当此节点位于ScrollContainer内时发送,当使用触摸事件*拖动可滚动区域时,该节点已开始滚动。此通知是*而不是在通过拖动滚动条滚动、使用鼠标滚轮滚动或使用键盘/游戏控制器事件滚动时发送的。
注意:此信号仅在Android或iOS或桌面/Web平台上启用ProjectSettings.input_devices/pointing/emulate_touch_from_mouse时发出。
NOTIFICATION_SCROLL_END = 48 🔗
当此节点位于ScrollContainer内时发送,该节点在使用触摸事件拖动可滚动区域时停止滚动。此通知不是在通过拖动滚动条滚动、使用鼠标滚轮滚动或使用键盘/游戏控制器事件滚动时发送的。
注意:此信号仅在Android或iOS或桌面/Web平台上启用ProjectSettings.input_devices/pointing/emulate_touch_from_mouse时发出。
NOTIFICATION_LAYOUT_DIRECTION_CHANGED = 49 🔗
当控制布局方向从LTR或RTL更改或从LTR或RTL更改时发送。由于更改为layout_direction,此通知将传播到子控制节点。
属性说明¶
将节点的下边缘锚定到其父控件的原点、中心或末尾。它会更改节点移动或更改大小时底部偏移量的更新方式。为方便起见,您可以使用Anchor常量之一。
将节点的左边缘锚定到其父控件的原点、中心或末尾。它会更改节点移动或更改大小时左偏移量的更新方式。为方便起见,您可以使用Anchor常量之一。
将节点的右边缘锚定到其父控件的原点、中心或末尾。它会更改节点移动或更改大小时右偏移量的更新方式。为方便起见,您可以使用Anchor常量之一。
将节点的上边缘锚定到其父控件的原点、中心或末尾。它会更改节点移动或更改大小时顶部偏移量的更新方式。为方便起见,您可以使用Anchor常量之一。
已弃用: 改用 Item.auto_translate_mode。
切换任何文本是否应根据当前语言环境自动更改为其翻译版本。
启用是否应将基于CanvasItem的子级渲染剪切到此控件的矩形。如果true,则在此控件矩形之外可见的子级部分将不会被渲染并且不会接收输入。
Vector2 custom_minimum_size = Vector2(0, 0) 🔗
节点边界矩形的最小大小。如果您将其设置为大于(0,0)的值,则节点的边界矩形将始终至少具有此大小。请注意,Control节点的内部最小大小由get_minimum_size()返回。这取决于控件的内容,如文本、纹理或样式框。实际最小大小是此属性的最大值和内部最小大小(参见get_combined_minimum_size())。
控件的焦点访问模式(无、单击或全部)。只能同时聚焦一个控件,它将接收键盘、游戏控制器和鼠标信号。
ItemPath focus_neighbor_bottom = ItemPath("") 🔗
如果用户默认按下键盘上的向下箭头控制器上的向下箭头,则告诉i3D应该将焦点放在哪个节点。您可以通过编辑ProjectSettings.input/ui_down输入操作来更改键。该节点必须是Control。如果未设置此属性,i3D将焦点放在离此节点底部最近的Control。
ItemPath focus_neighbor_left = ItemPath("") 🔗
如果用户按键盘上的左箭头或默认情况下按游戏控制器上的左箭头,则告诉i3D应该将焦点放在哪个节点上。您可以通过编辑ProjectSettings.input/ui_left输入操作来更改键。该节点必须是Control。如果未设置此属性,i3D将焦点放在离此节点左侧最近的Control。
ItemPath focus_neighbor_right = ItemPath("") 🔗
如果用户默认按下键盘上的右箭头控制器上的右箭头,则告诉i3D应该将焦点放在哪个节点。您可以通过编辑ProjectSettings.input/ui_right输入操作来更改键。该节点必须是Control。如果未设置此属性,i3D将焦点放在离此节点最近的Control右侧。
ItemPath focus_neighbor_top = ItemPath("") 🔗
默认情况下,如果用户按下键盘上的顶部箭头控制器上的顶部,则告诉i3D应该将焦点放在哪个节点。您可以通过编辑ProjectSettings.input/ui_up输入操作来更改键。该节点必须是Control。如果未设置此属性,i3D将焦点放在最接近该节点顶部的Control。
ItemPath focus_next = ItemPath("") 🔗
如果用户默认按下键盘上的Tab,则告诉i3D它应该将焦点放在哪个节点。您可以通过编辑ProjectSettings.input/ui_focus_next输入操作来更改键。
如果未设置此属性,i3D将根据场景树中的周围节点选择“最佳猜测”。
ItemPath focus_previous = ItemPath("") 🔗
如果用户默认在键盘上按下Shift+Tab,则告诉i3D应该将焦点放在哪个节点。您可以通过编辑ProjectSettings.input/ui_focus_prev输入操作来更改键。
如果未设置此属性,i3D将根据场景树中的周围节点选择“最佳猜测”。
Vector2 get_global_position()
节点的全局位置,相对于世界(通常相对于CanvasLayer)。
GrowDirection grow_horizontal = 1 🔗
void set_h_grow_direction(value: GrowDirection)
GrowDirection get_h_grow_direction()
如果控件的水平最小大小更改为大于当前大小,则控制控件应在水平轴上的方向,因为控件必须始终至少为最小大小。
GrowDirection grow_vertical = 1 🔗
void set_v_grow_direction(value: GrowDirection)
GrowDirection get_v_grow_direction()
如果控件的垂直最小大小更改为大于当前大小,则控件应在垂直轴上的方向,因为控件始终必须至少为最小大小。
LayoutDirection layout_direction = 0 🔗
void set_layout_direction(value: LayoutDirection)
LayoutDirection get_layout_direction()
控制布局方向和文本书写方向。对于某些语言(例如阿拉伯语和希伯来语),从右到左的布局是必要的。另请参见is_layout_rtl()。
bool localize_numeral_system = true 🔗
如果true,则自动将代码行号、列表索引、SpinBox和ProgressBar值从西阿拉伯语(0…9)转换为当前语言环境中使用的数字系统。
注意:文本中的数字不会自动转换,可以使用TextServer.format_number()手动完成。
CursorShape mouse_default_cursor_shape = 0 🔗
void set_default_cursor_shape(value: CursorShape)
CursorShape get_default_cursor_shape()
此控件的默认光标形状。对于使用系统鼠标光标的i3D插件和应用程序很有用。
注意:在Linux,形状可能会因系统的光标主题而异。
MouseFilter mouse_filter = 0 🔗
void set_mouse_filter(value: MouseFilter)
MouseFilter get_mouse_filter()
控制控件是否能够通过_gui_input()接收鼠标按钮输入事件以及如何处理这些事件。还控制控件是否可以接收mouse_entered和mouse_exited信号。请参阅常量以了解每个常量的作用。
bool mouse_force_pass_scroll_events = true 🔗
启用后,即使mouse_filter设置为MOUSE_FILTER_STOP,_gui_input()处理的滚轮事件也将传递给父控件。
如果您不希望滚动事件转到Item.unhandled_input()处理,则应在UI的根目录上禁用它。
注意:因为此属性默认为true,所以这允许嵌套的可滚动容器开箱即用。
节点底部边缘与其父控件之间的距离,基于anchor_bottom。
偏移量通常由一个或多个父Container节点控制,因此如果您的节点是Container的直接子节点,则不应手动修改它们。当您移动或调整节点大小时,偏移量会自动更新。
节点左边缘与其父控件之间的距离,基于anchor_left。
偏移量通常由一个或多个父Container节点控制,因此如果您的节点是Container的直接子节点,则不应手动修改它们。当您移动或调整节点大小时,偏移量会自动更新。
节点右边缘与其父控件之间的距离,基于anchor_right。
偏移量通常由一个或多个父Container节点控制,因此如果您的节点是Container的直接子节点,则不应手动修改它们。当您移动或调整节点大小时,偏移量会自动更新。
节点顶部边缘与其父控件之间的距离,基于anchor_top。
偏移量通常由一个或多个父Container节点控制,因此如果您的节点是Container的直接子节点,则不应手动修改它们。当您移动或调整节点大小时,偏移量会自动更新。
Vector2 pivot_offset = Vector2(0, 0) 🔗
默认情况下,节点的枢轴是其左上角。当您更改其rotation或scale时,它将围绕此枢轴旋转或缩放。将此属性设置为size/2以围绕控件的中心旋转。
Vector2 position = Vector2(0, 0) 🔗
Vector2 get_position()
节点相对于其包含节点的位置。它对应于矩形的左上角。该属性不受pivot_offset的影响。
节点围绕其枢轴的旋转,以弧度为单位。请参阅pivot_offset以更改枢轴的位置。
注意:此属性在检查器中以度为单位进行编辑。如果要在脚本中使用度,请使用rotation_degrees。
辅助属性以度而不是弧度访问rotation。
Vector2 scale = Vector2(1, 1) 🔗
节点相对于其size的缩放。更改此属性以围绕其pivot_offset缩放节点。控件的tooltip_text也将根据此值缩放。
注意:此属性主要用于动画目的。要在项目中支持多种分辨率,请使用视口拉伸模式,而不是单独缩放控件。
注意:FontFile.oversampling不考虑Controlscale。这意味着向上/向下缩放将导致位图字体和光栅化(非MSDF)动态字体看起来模糊或像素化。为确保文本无论比例大小都保持清晰,您可以通过启用ProjectSettings.gui/theme/default_font_multichannel_signed_distance_field(仅适用于默认项目字体)来启用MSDF字体渲染,或在DynamicFont的导入选项中为自定义字体启用多通道签名距离字段。在系统字体上,可以在检查器中启用SystemFont.multichannel_signed_distance_field。
注意:如果Control节点是Container节点的子节点,则当场景实例化时,比例将重置为Vector2(1,1)。要在实例化时设置Control的比例,请使用waitget_tree()等待一帧。process_frame然后设置其scale属性。
Item必须是焦点Control的父级才能激活快捷方式。如果null,则可以在任何控件被聚焦时激活快捷方式(全局快捷方式)。这允许仅当用户聚焦GUI的某个区域时才接受快捷方式。
Vector2 size = Vector2(0, 0) 🔗
Vector2 get_size()
节点坐标系中节点边界矩形的大小。Container节点会自动更新此属性。
BitField[SizeFlags] size_flags_horizontal = 1 🔗
告诉父Container节点它们应该如何调整大小并将节点放置在X轴上。使用SizeFlags常量的组合来更改标志。查看常量以了解每个常量的作用。
float size_flags_stretch_ratio = 1.0 🔗
如果节点和它的至少一个邻居使用SIZE_EXPAND大小标志,父节点Container将根据这个属性让它占用或多或少的空间。如果这个节点的拉伸比为2,它的邻居的拉伸比为1,这个节点将占用三分之二的可用空间。
BitField[SizeFlags] size_flags_vertical = 1 🔗
告诉父Container节点它们应该如何调整大小并将节点放置在Y轴上。使用SizeFlags常量的组合来更改标志。查看常量以了解每个常量的作用。
此节点及其所有Control和Window子节点使用的Theme资源。如果子节点有自己的Theme资源集,则主题项与具有更高优先级的子定义合并。
注意:Window样式将无效,除非嵌入窗口。
StringName theme_type_variation = &"" 🔗
void set_theme_type_variation(value: StringName)
StringName get_theme_type_variation()
此Control用来查找自己的主题项的主题类型变体的名称。空时,使用节点的类名(例如Button控件的Button),以及所有父类的类名(按继承顺序)。
设置后,此属性将最高优先级赋予指定名称的类型。此类型可以反过来扩展另一种类型,形成依赖链。请参阅Theme.set_type_variation()。如果使用此类型或其基本类型找不到主题项,则查找返回类名。
注意:要查找Control自己的项目,请使用各种get_theme_*方法,而不指定theme_type。
注意:主题项按树顺序查找,从分支到根,其中检查每个Control节点的theme属性。返回与任何类型/类名的最早匹配项。最后检查项目级主题和默认主题。
AutoTranslateMode tooltip_auto_translate_mode = 0 🔗
void set_tooltip_auto_translate_mode(value: AutoTranslateMode)
AutoTranslateMode get_tooltip_auto_translate_mode()
定义工具提示文本是否应根据当前语言环境自动更改为其翻译版本。当设置为Item.AUTO_TRANSLATE_MODE_INHERIT时,使用与此控件相同的自动翻译模式。
注意:使用_make_custom_tooltip()定制的工具提示不会自动使用此自动翻译模式。
默认的工具提示文本。当用户的鼠标光标在此控件上停留几秒钟时,工具提示会出现,前提是mouse_filter属性不是MOUSE_FILTER_IGNORE。工具提示出现所需的时间可以通过ProjectSettings.gui/timers/tooltip_delay_sec设置来更改。
此字符串是get_tooltip()的默认返回值。覆盖_get_tooltip()可以动态生成工具提示文本。覆盖_make_custom_tooltip()可以自定义工具提示的界面和行为。
工具提示弹出框将使用默认实现或您可以通过覆盖_make_custom_tooltip()提供的自定义实现。默认的工具提示包含一个PopupPanel和Label,其主题属性可以使用Theme方法进行自定义,分别使用"TooltipPanel"和"TooltipLabel"。例如:
var style_box = StyleBoxFlat.new()
style_box.set_bg_color(Color(1, 1, 0))
style_box.set_border_width_all(2)
# We assume here that the `theme` property has been assigned a custom Theme beforehand.
theme.set_stylebox("panel", "TooltipPanel", style_box)
theme.set_color("font_color", "TooltipLabel", Color(0, 1, 1))
var styleBox = new StyleBoxFlat();
styleBox.SetBgColor(new Color(1, 1, 0));
styleBox.SetBorderWidthAll(2);
// We assume here that the `Theme` property has been assigned a custom Theme beforehand.
Theme.SetStyleBox("panel", "TooltipPanel", styleBox);
Theme.SetColor("font_color", "TooltipLabel", new Color(0, 1, 1));
方法说明¶
bool _can_drop_data(at_position: Vector2, data: Variant) virtual const 🔗
i3D调用此方法来测试来自控件的_get_drag_data()的data是否可以被拖放到at_position处。at_position是此控件的局部变量。此方法仅用于测试数据,请在_drop_data()中处理数据。
func _can_drop_data(position, data):
# Check position if it is relevant to you
# Otherwise, just check data
return typeof(data) == TYPE_DICTIONARY and data.has("expected")
public override bool _CanDropData(Vector2 atPosition, Variant data)
{
// Check position if it is relevant to you
// Otherwise, just check data
return data.VariantType == Variant.Type.Dictionary && data.Asi3DDictionary().ContainsKey("expected");
}
void _drop_data(at_position: Vector2, data: Variant) virtual 🔗
i3D调用此方法从控件的_get_drag_data()结果中传递data给您。i3D首先调用_can_drop_data()来测试是否允许data在at_position处进行拖放,其中at_position是该控件的局部变量。
func _can_drop_data(position, data):
return typeof(data) == TYPE_DICTIONARY and data.has("color")
func _drop_data(position, data):
var color = data["color"]
public override bool _CanDropData(Vector2 atPosition, Variant data)
{
return data.VariantType == Variant.Type.Dictionary && data.Asi3DDictionary().ContainsKey("color");
}
public override void _DropData(Vector2 atPosition, Variant data)
{
Color color = data.Asi3DDictionary()["color"].AsColor();
}
Variant _get_drag_data(at_position: Vector2) virtual 🔗
i3D使用此方法获取可拖放到接受拖放数据的控件上的数据。如果没有可拖放的数据,则返回null。需要接收拖放数据的控件应实现_can_drop_data()和_drop_data()。at_position是此控件的局部变量。可以使用force_drag()强制拖放。
可以使用set_drag_preview()设置一个预览,该预览将跟随鼠标并代表数据。设置预览的好时机是在此方法中。
func _get_drag_data(position):
var mydata = make_data() # This is your custom method generating the drag data.
set_drag_preview(make_preview(mydata)) # This is your custom method generating the preview of the drag data.
return mydata
public override Variant _GetDragData(Vector2 atPosition)
{
var myData = MakeData(); // This is your custom method generating the drag data.
SetDragPreview(MakePreview(myData)); // This is your custom method generating the preview of the drag data.
return myData;
}
Vector2 _get_minimum_size() virtual const 🔗
要由用户实现的虚拟方法。返回此控件的最小大小。替代custom_minimum_size通过代码控制最小大小。实际最小大小将是这两个的最大值(在每个轴中分别)。
如果未重写,则默认为Vector2.ZERO。
注意:当脚本附加到已经覆盖其最小大小的Control节点(例如Label、Button、PanelContainer等)时,不会调用此方法。它只能用于最基本的GUI节点,如Control、Container、Panel等。
String _get_tooltip(at_position: Vector2) virtual const 🔗
由用户实现的虚拟方法。返回控件本地坐标中位置at_position的工具提示文本,该文本通常在光标停留在此控件上时出现。请参阅get_tooltip()。
注意:如果此方法返回空的String并且_make_custom_tooltip()未被覆盖,则不显示工具提示。
void _gui_input(event: InputEvent) virtual 🔗
用户需要实现的虚拟方法。覆盖此方法以处理和接受UI元素上的输入。另请参阅accept_event()。
示例:点击控件以打印消息:
func _gui_input(event):
if event is InputEventMouseButton:
if event.button_index == MOUSE_BUTTON_LEFT and event.pressed:
print("I've been clicked D:")
public override void _GuiInput(InputEvent @event)
{
if (@event is InputEventMouseButton mb)
{
if (mb.ButtonIndex == MouseButton.Left && mb.Pressed)
{
S3.Print("I've been clicked D:");
}
}
}
如果event继承InputEventMouse,则在以下情况下不会调用此方法:
控件被另一个位于上方的控件阻挡,该控件没有将mouse_filter设置为MOUSE_FILTER_IGNORE;
控件的父控件将mouse_filter设置为MOUSE_FILTER_STOP或已接受该事件;
控件的父控件已启用clip_contents,并且
event的位置在父控件的矩形之外;event的位置在控件之外。请参阅_has_point().
注意: event的位置相对于此控件的原点。
bool _has_point(point: Vector2) virtual const 🔗
要由用户实现的虚拟方法。返回给定的point是否在此控件内。
如果未覆盖,默认行为是检查该点是否在控件的Rect内。
注意:如果要检查一个点是否在控件内,可以使用Rect2(Vector2.ZERO, size).has_point(point)。
Object _make_custom_tooltip(for_text: String) virtual const 🔗
用户需要实现的虚拟方法。返回一个Control节点,该节点应作为工具提示使用,而不是默认的工具提示。for_text是get_tooltip()的返回值。
返回的节点必须是Control类型或派生自Control的类型。它可以有任何类型的子节点。当工具提示消失时,它将被释放,因此请确保始终提供一个新的实例(如果您想使用场景树中的现有节点,则可以复制它并传递复制后的实例)。当返回null或非控件节点时,将使用默认工具提示。
返回的节点将作为子节点添加到PopupPanel中,因此您只需要提供该面板的内容。该PopupPanel可以使用Theme.set_stylebox()为"TooltipPanel"类型进行主题化(请参阅tooltip_text中的示例)。
注意:工具提示会缩小到最小尺寸。如果要确保它完全可见,您可能需要将其custom_minimum_size设置为非零值。
注意:如果重写,此方法即使get_tooltip()返回空字符。为了复制此行为,当for_text为空时,请在此方法中返回null。
示例:使用构建的节点作为工具提示:
func _make_custom_tooltip(for_text):
var label = Label.new()
label.text = for_text
return label
public override Control _MakeCustomTooltip(string forText)
{
var label = new Label();
label.Text = forText;
return label;
}
Example: Usa a scene instance as a tooltip:
func _make_custom_tooltip(for_text):
var tooltip = preload("res://some_tooltip_scene.iscn").instantiate()
tooltip.get_node("Label").text = for_text
return tooltip
public override Control _MakeCustomTooltip(string forText)
{
Item tooltip = ResourceLoader.Load<PackedScene>("res://some_tooltip_scene.iscn").Instantiate();
tooltip.GetNode<Label>("Label").Text = forText;
return tooltip;
}
Array[Vector3i] _structured_text_parser(args: Array, text: String) virtual const 🔗
用户定义的BiDi算法覆盖功能。
按从左到右的顺序返回Vector3i文本范围和文本基本方向的Array。范围应覆盖完整的源text而不重叠。BiDi算法将分别用于每个范围。
void accept_event() 🔗
将输入事件标记为已处理。一旦接受输入事件,它就会停止传播,甚至停止传播到监听Item.unhandled_input()或Item.unhandled_key_input()的节点。
注意:这不会影响Input中的方法,只会影响事件的传播方式。
void add_theme_color_override(name: StringName, color: Color) 🔗
使用指定的name为主题Color创建本地覆盖。当为控件获取主题项时,本地覆盖总是优先考虑。可以使用remove_theme_color_override()删除覆盖。另请参阅get_theme_color()。示例:覆盖Label的颜色并稍后重置:
# Given the child Label node "MyLabel", override its font color with a custom value.
$MyLabel.add_theme_color_override("font_color", Color(1, 0.5, 0))
# Reset the font color of the child label.
$MyLabel.remove_theme_color_override("font_color")
# Alternatively it can be overridden with the default value from the Label type.
$MyLabel.add_theme_color_override("font_color", get_theme_color("font_color", "Label"))
// Given the child Label node "MyLabel", override its font color with a custom value.
GetNode<Label>("MyLabel").AddThemeColorOverride("font_color", new Color(1, 0.5f, 0));
// Reset the font color of the child label.
GetNode<Label>("MyLabel").RemoveThemeColorOverride("font_color");
// Alternatively it can be overridden with the default value from the Label type.
GetNode<Label>("MyLabel").AddThemeColorOverride("font_color", GetThemeColor("font_color", "Label"));
void add_theme_constant_override(name: StringName, constant: int) 🔗
为具有指定name的主题常量创建本地覆盖。获取控件的主题项时,本地覆盖始终优先。可以使用remove_theme_constant_override()删除覆盖。
void add_theme_font_override(name: StringName, font: Font) 🔗
为具有指定name的主题Font创建本地覆盖。为控件获取主题项时,本地覆盖始终优先。可以使用remove_theme_font_override()删除覆盖。
void add_theme_font_size_override(name: StringName, font_size: int) 🔗
使用指定的name为主题字体大小创建本地覆盖。获取控件的主题项时,本地覆盖始终优先。可以使用remove_theme_font_size_override()删除覆盖。
void add_theme_icon_override(name: StringName, texture: Texture2D) 🔗
为具有指定name的主题图标创建本地覆盖。获取控件的主题项时,本地覆盖始终优先。可以使用remove_theme_icon_override()删除覆盖。
void add_theme_stylebox_override(name: StringName, stylebox: StyleBox) 🔗
使用指定的name为主题StyleBox创建本地覆盖。在为控件获取主题项时,本地覆盖总是优先考虑。可以使用remove_theme_stylebox_override()删除覆盖。
另请参阅get_theme_stylebox()。
示例:通过复制来修改StyleBox中的属性:
# The snippet below assumes the child node "MyButton" has a StyleBoxFlat assigned.
# Resources are shared across instances, so we need to duplicate it
# to avoid modifying the appearance of all other buttons.
var new_stylebox_normal = $MyButton.get_theme_stylebox("normal").duplicate()
new_stylebox_normal.border_width_top = 3
new_stylebox_normal.border_color = Color(0, 1, 0.5)
$MyButton.add_theme_stylebox_override("normal", new_stylebox_normal)
# Remove the stylebox override.
$MyButton.remove_theme_stylebox_override("normal")
// The snippet below assumes the child node "MyButton" has a StyleBoxFlat assigned.
// Resources are shared across instances, so we need to duplicate it
// to avoid modifying the appearance of all other buttons.
StyleBoxFlat newStyleboxNormal = GetNode<Button>("MyButton").GetThemeStylebox("normal").Duplicate() as StyleBoxFlat;
newStyleboxNormal.BorderWidthTop = 3;
newStyleboxNormal.BorderColor = new Color(0, 1, 0.5f);
GetNode<Button>("MyButton").AddThemeStyleboxOverride("normal", newStyleboxNormal);
// Remove the stylebox override.
GetNode<Button>("MyButton").RemoveThemeStyleboxOverride("normal");
void begin_bulk_theme_override() 🔗
防止*_theme_*_override方法发出NOTIFICATION_THEME_CHANGED,直到调用end_bulk_theme_override()。
void end_bulk_theme_override() 🔗
结束批量主题覆盖更新。请参见begin_bulk_theme_override()。
Control find_next_valid_focus() const 🔗
查找下一个(在树的下方)Control可以接收焦点。
Control find_prev_valid_focus() const 🔗
查找可以接收焦点的前一个(树的上方)Control。
Control find_valid_focus_neighbor(side: Side) const 🔗
查找下一个可以在指定的Side上接收焦点的Control。
注意:这与get_focus_neighbor()不同,后者返回指定焦点邻居的路径。
void force_drag(data: Variant, preview: Control) 🔗
通过传递data和preview强制拖动并绕过_get_drag_data()和set_drag_preview()。即使鼠标没有结束或按下此控件,拖动也会启动。
方法_can_drop_data()和_drop_data()必须在想要接收删除数据的控件上实现。
float get_anchor(side: Side) const 🔗
返回指定Side的锚点。anchor_bottom、anchor_left、anchor_right和anchor_top的getter方法。
Vector2 get_combined_minimum_size() const 🔗
返回custom_minimum_size和get_minimum_size()的组合最小大小。
CursorShape get_cursor_shape(position: Vector2 = Vector2(0, 0)) const 🔗
返回控件在鼠标悬停时显示的鼠标光标形状。请参阅CursorShape。
ItemPath get_focus_neighbor(side: Side) const 🔗
返回指定Side的焦点邻居。focus_neighbor_bottom、focus_neighbor_left、focus_neighbor_right和focus_neighbor_top的getter方法。
注意:要在特定的Side上找到下一个Control,即使没有分配邻居,也可以使用find_valid_focus_neighbor()。
Rect2 get_global_rect() const 🔗
返回控件相对于包含画布的位置和大小。请参见global_position和size。
注意:将Viewport.gui_snap_controls_to_pixels设置为true可能会导致显示的控件和返回的Rect2之间的舍入不准确。
Vector2 get_minimum_size() const 🔗
返回此控件的最小大小。请参见custom_minimum_size。
float get_offset(offset: Side) const 🔗
返回指定Side的偏移量。offset_bottom、offset_left、offset_right和offset_top的getter方法。
Vector2 get_parent_area_size() const 🔗
返回父控件中占用的宽度/高度。
Control get_parent_control() const 🔗
返回父控制节点。
返回控件在包含节点坐标系中的位置和大小。请参阅position、scale和size。
注意:如果rotation不是默认轮换,则生成的大小没有意义。
注意:将Viewport.gui_snap_controls_to_pixels设置为true可能会导致显示的控件和返回的Rect2之间的舍入不准确。
Vector2 get_screen_position() const 🔗
返回此Control在全局屏幕坐标中的位置(即考虑窗口位置)。主要适用于编辑器插件。如果窗口是嵌入式的,则等于global_position(请参阅Viewport.gui_embed_subwindows)。示例:在鼠标位置显示弹出窗口:
popup_menu.position = get_screen_position() + get_local_mouse_position()
popup_menu.reset_size()
popup_menu.popup()
Color get_theme_color(name: StringName, theme_type: StringName = &"") const 🔗
如果树中第一个匹配的 Theme 有一个指定 name 和 theme_type 的颜色项,则返回一个 Color。如果省略了 theme_type,则使用当前控件的类名作为类型,或者如果定义了 theme_type_variation,则使用它。如果类型是类名,还会检查其父类,按照继承顺序进行。如果类型是变体,则按依赖顺序检查其基本类型,然后检查控件的类名及其父类。
对于当前控件,首先考虑其本地覆盖(参见add_theme_color_override()),然后考虑其分配的theme。在当前控件之后,考虑每个父控件及其分配的theme;跳过未分配theme的控件。如果在树中没有找到匹配的Theme,则使用自定义项目Theme(参见ProjectSettings.gui/theme/custom)和默认的Theme(参见ThemeDB)。
func _ready():
# Get the font color defined for the current Control's class, if it exists.
modulate = get_theme_color("font_color")
# Get the font color defined for the Button class.
modulate = get_theme_color("font_color", "Button")
public override void _Ready()
{
// Get the font color defined for the current Control's class, if it exists.
Modulate = GetThemeColor("font_color");
// Get the font color defined for the Button class.
Modulate = GetThemeColor("font_color", "Button");
}
int get_theme_constant(name: StringName, theme_type: StringName = &"") const 🔗
如果树中的第一个匹配的Theme具有具有指定name和theme_type的常量项,则返回该常量。
float get_theme_default_base_scale() const 🔗
如果Theme具有有效的Theme.default_base_scale值,则从树中第一个匹配的Theme返回默认的基本比例值。
Font get_theme_default_font() const 🔗
如果Theme具有有效的Theme.default_font值,则从树中第一个匹配的Theme返回默认字体。
int get_theme_default_font_size() const 🔗
如果Theme具有有效的Theme.default_font_size值,则从树中第一个匹配的Theme返回默认字体大小值。
Font get_theme_font(name: StringName, theme_type: StringName = &"") const 🔗
如果该Theme具有具有指定name和theme_type的字体项,则从树中第一个匹配的Theme返回Font。
int get_theme_font_size(name: StringName, theme_type: StringName = &"") const 🔗
如果该Theme具有具有指定name和theme_type的字体大小项,则从树中第一个匹配的Theme返回字体大小。
Texture2D get_theme_icon(name: StringName, theme_type: StringName = &"") const 🔗
如果Theme具有具有指定name和theme_type的图标项,则从树中第一个匹配的Theme返回图标。
StyleBox get_theme_stylebox(name: StringName, theme_type: StringName = &"") const 🔗
如果Theme具有具有指定name和theme_type的样式框项,则从树中第一个匹配的Theme返回theme_type。
String get_tooltip(at_position: Vector2 = Vector2(0, 0)) const 🔗
返回控件本地坐标中位置at_position的工具提示文本,该文本通常在光标停留在此控件上时出现。默认情况下,它返回tooltip_text。
可以重写此方法以自定义其行为。请参阅_get_tooltip()。
注意:如果此方法返回空的String并且_make_custom_tooltip()未被覆盖,则不显示工具提示。
void grab_click_focus() 🔗
创建一个InputEventMouseButton,尝试点击控件。如果收到该事件,则控件获得焦点。
func _process(delta):
grab_click_focus() # When clicking another Control node, this node will be clicked instead.
public override void _Process(double delta)
{
GrabClickFocus(); // When clicking another Control node, this node will be clicked instead.
}
void grab_focus() 🔗
从另一个控件窃取焦点并成为焦点控件(参见focus_mode)。
注意:将此方法与Callable.call_deferred()一起使用使其更可靠,尤其是在Item.iStart()内部调用时。
如果这是当前聚焦的控件,则返回true。请参阅focus_mode。
bool has_theme_color(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有匹配的Theme,该主题具有具有指定name和theme_type的颜色项。
bool has_theme_color_override(name: StringName) const 🔗
如果在此Control节点中具有指定name的主题Color有本地覆盖,则返回true。
bool has_theme_constant(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有一个匹配的Theme,该主题具有具有指定name和theme_type的常量项。
bool has_theme_constant_override(name: StringName) const 🔗
如果此Control节点中具有指定name的主题常量存在本地覆盖,则返回true。
参见add_theme_constant_override()。
bool has_theme_font(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有一个匹配的Theme具有指定的name和theme_type的字体项。
bool has_theme_font_override(name: StringName) const 🔗
如果在此Control节点中具有指定name的主题Font有本地覆盖,则返回true。
bool has_theme_font_size(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有匹配的Theme,其字体大小项具有指定的name和theme_type。
bool has_theme_font_size_override(name: StringName) const 🔗
如果在此Control节点中具有指定name的主题字体大小存在本地覆盖,则返回true。
参见add_theme_font_size_override()。
bool has_theme_icon(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有一个匹配的Theme,该主题具有具有指定name和theme_type的图标项。
bool has_theme_icon_override(name: StringName) const 🔗
如果此Control节点中具有指定name的主题图标存在本地覆盖,则返回true。
bool has_theme_stylebox(name: StringName, theme_type: StringName = &"") const 🔗
返回true,如果树中有匹配的Theme,该主题具有具有指定name和theme_type的样式框项。
bool has_theme_stylebox_override(name: StringName) const 🔗
如果在此Control节点中具有指定name的主题StyleBox有本地覆盖,则返回true。
参见add_theme_stylebox_override()。
bool is_drag_successful() const 🔗
如果拖动操作成功,则返回true。替代Viewport.gui_is_drag_successful()。
最好与Item.NOTIFICATION_DRAG_END一起使用。
如果布局是从右到左,则返回true。另请参见layout_direction。
void release_focus() 🔗
放弃焦点。没有其他控件能够接收输入。
void remove_theme_color_override(name: StringName) 🔗
删除先前由add_theme_color_override()或通过检查器停靠坞添加的具有指定name的主题Color的本地覆盖。
void remove_theme_constant_override(name: StringName) 🔗
删除先前由add_theme_constant_override()或通过检查器停靠坞添加的具有指定name的主题常量的本地覆盖。
void remove_theme_font_override(name: StringName) 🔗
删除先前由add_theme_font_override()或通过检查器停靠坞添加的具有指定name的主题Font的本地覆盖。
void remove_theme_font_size_override(name: StringName) 🔗
删除先前由add_theme_font_size_override()或通过检查器停靠坞添加的具有指定name的主题字体大小的本地覆盖。
void remove_theme_icon_override(name: StringName) 🔗
删除先前由add_theme_icon_override()或通过检查器停靠坞添加的具有指定name的主题图标的本地覆盖。
void remove_theme_stylebox_override(name: StringName) 🔗
删除主题StyleBox的本地覆盖,其指定的name先前由add_theme_stylebox_override()或通过检查器停靠坞添加。
void reset_size() 🔗
将大小重置为get_combined_minimum_size()。这相当于调用set_size(Vector2())(或低于最小值的任何大小)。
void set_anchor(side: Side, anchor: float, keep_offset: bool = false, push_opposite_anchor: bool = true) 🔗
将指定Side的锚点设置为anchor。anchor_bottom、anchor_left、anchor_right和anchor_top的setter方法。
如果keep_offset为true,则此操作后不会更新偏移量。
如果push_opposite_anchor是true并且相反的锚点与此锚点重叠,则相反的锚点的值将被覆盖。例如,当将左锚点设置为1并且右锚点的值为0.5时,右锚点也将获得值1。如果push_opposite_anchor是false,则左锚点将获得值0.5。
void set_anchor_and_offset(side: Side, anchor: float, offset: float, push_opposite_anchor: bool = false) 🔗
与set_anchor()的工作方式相同,但它允许自己设置偏移量,而不是keep_offset参数和自动更新偏移量(参见set_offset())。
void set_anchors_and_offsets_preset(preset: LayoutPreset, resize_mode: LayoutPresetMode = 0, margin: int = 0) 🔗
设置锚点预设和偏移预设。请参见set_anchors_preset()和set_offsets_preset()。
void set_anchors_preset(preset: LayoutPreset, keep_offsets: bool = false) 🔗
从LayoutPreset枚举将锚点设置为preset。这是相当于使用2D编辑器中的布局菜单的代码。
如果keep_offsets为true,则控件的位置也将更新。
void set_begin(position: Vector2) 🔗
同时设置offset_left和offset_top。相当于改变position。
void set_drag_forwarding(drag_func: Callable, can_drop_func: Callable, drop_func: Callable) 🔗
设置要使用的给定可调用对象,而不是控件自己的拖放虚拟方法。如果可调用对象为空,则正常使用其各自的虚拟方法。
每个可调用的参数应该与它们各自的虚拟方法完全相同,即:
-drag_func对应_get_drag_data(),需要一个Vector2;
-can_drop_func对应_can_drop_data(),需要一个Vector2和一个Variant;
-drop_func对应于_drop_data(),并且需要Vector2和Variant。
void set_drag_preview(control: Control) 🔗
显示鼠标指针处的给定控件。调用此方法的好时机是在_get_drag_data()中。控件不应在场景树中。不应释放控件,也不应在拖动持续时间之外保留对控件的引用。拖动结束后,控件将自动被删除。
@export var color = Color(1, 0, 0, 1)
func _get_drag_data(position):
# Use a control that is not in the tree
var cpb = ColorPickerButton.new()
cpb.color = color
cpb.size = Vector2(50, 50)
set_drag_preview(cpb)
return color
[Export]
private Color _color = new Color(1, 0, 0, 1);
public override Variant _GetDragData(Vector2 atPosition)
{
// Use a control that is not in the tree
var cpb = new ColorPickerButton();
cpb.Color = _color;
cpb.Size = new Vector2(50, 50);
SetDragPreview(cpb);
return _color;
}
void set_end(position: Vector2) 🔗
同时设置offset_right和offset_bottom。
void set_focus_neighbor(side: Side, neighbor: ItemPath) 🔗
将指定Side的焦点邻居设置为neighbor节点路径处的Control。focus_neighbor_bottom、focus_neighbor_left、focus_neighbor_right和focus_neighbor_top的setter方法。
void set_global_position(position: Vector2, keep_offsets: bool = false) 🔗
将global_position设置为给定的position。
如果keep_offsets为true,则将更新控件的锚点而不是偏移量。
void set_offset(side: Side, offset: float) 🔗
将指定Side的偏移量设置为offset。offset_bottom、offset_left、offset_right和offset_top的setter方法。
void set_offsets_preset(preset: LayoutPreset, resize_mode: LayoutPresetMode = 0, margin: int = 0) 🔗
从LayoutPreset枚举将偏移量设置为preset。这是相当于使用2D编辑器中的布局菜单的代码。
使用resize_mode和LayoutPresetMode中的常量来更好地确定Control的结果大小。如果与改变大小的预设一起使用,常量大小将被忽略,例如PRESET_LEFT_WIDE。
使用参数margin来确定Control和边缘之间的间隙。
void set_position(position: Vector2, keep_offsets: bool = false) 🔗
将position设置为给定的position。
如果keep_offsets为true,则将更新控件的锚点而不是偏移量。
void set_size(size: Vector2, keep_offsets: bool = false) 🔗
设置大小(请参阅size)。
如果keep_offsets为true,则将更新控件的锚点而不是偏移量。
void update_minimum_size() 🔗
使此节点和最高级别的父节点中的大小缓存无效。当返回值更改时,旨在与get_minimum_size()一起使用。设置custom_minimum_size直接自动调用此方法。
void warp_mouse(position: Vector2) 🔗
将鼠标光标移动到position,相对于此Control的position。
注意:warp_mouse()仅在Windows、macOS和Linux上受支持,对Android、iOS和Web没有影响。