godot-4.0-tool_button
godot-4.0-tool_button copied to clipboard
Ease development with an inspector button that's plumb simple.
trafficstars
ToolButtonPlugin for Godot 4.0 - v1.4
Editor buttons with ~~one line of code: @tool~~ zero lines of code.
Simply install, and select any node:
- Public methods will be listed at the bottom of editor panel.
- Signals with 0 arguments will also be shown.
For more advanced features, read below.

Getting Started
- Enable plugin.
- Add
@toolto top of your script. - Add a
_get_tool_buttons() -> Arraymethod. - The array items can be:
- Names of methods
"my_method" - Method itself
my_method - Bound method
method.bind(true, "ok" 1.0) - Anonymous methods
func(): print("Hey!") - Anonymous methods with name
func press_me(): print("You pressed me!") - Names of signals
"my_signal" - Signal itself
my_signal - Array with signal and arguments
["my_signal", [true, "ok"]] - Dictionarys with fine tuned control:
{call=method.bind(true), text="My Method", tint=Color.RED} - Arrays with any of the above
["my_method", method2.bind(1.0), "a_signal", {text="X", call=reset}]
- Names of methods

Advanced Example
To specify buttons that show above the inspector, add a _get_tool_buttons func.

With Strings:
@tool
extends Node
func _get_tool_buttons():
return [boost_score, remove_player]
func boost_score():
Player.score += 100
func remove_player():
Player.queue_free()
and/or Callables
# WARNING, some stuff won't work: If you get *"Cannot access member without instance"*: https://github.com/godotengine/godot/issues/56780
@tool
extends Node
func _get_tool_buttons():
return [
func add_score(): score += 10,
func reset_health(): health = 0
]
and/or Dictionarys
@tool
extends Node
signal reset()
func _get_tool_buttons(): return [
"boost_score",
{call="boost_score", args=[100], tint=Color.DEEP_SKY_BLUE},
{call="emit_signal", args=["reset"], text="Reset", tint=Color.TOMATO},
{
call=func(): print("My Health: ", health),
text="Print Health",
tint=func(): return Color(health * .1, 0.0, 0.0)
lock=func(): return health == 100
}
]
func boost_score(x=10):
Player.score += x
call is mandatory. Other's are optional.
| key | desc | default |
|---|---|---|
| call | Method to call. | - |
| args | Array of arguments to pass. (Mouse over button to see args.) |
- |
| text | Button label. | - |
| tint | Button color. | Color.WHITE |
| icon | Button icon. | - |
| flat | Button is flat style. | false |
| hint | Hint text for mouse over. | - |
| Print output of method call? | true | |
| align | Button alignment. | BoxContainer.ALIGNMENT_CENTER |
| lock | Disable button? | false |
| update_filesystem | Tells Godot editor to rescan file system. | false |
Resource Example
For _get_tool_buttons to work on a Resource it needs to be static.
@tool
extends Resource
class_name MyResource
# STATIC
static func _get_tool_buttons():
return ["my_button"]
# LOCAL
export(String) var my_name:String = ""
func my_button():
print(my_name)
Signals
signal my_signal()
signal my_arg_signal(x, y)
func _get_tool_buttons():
return [
my_signal,
[my_arg_signal, [true, "okay"]]
]
Multi button support
You can have multiple buttons on the same line.
They can all be called at once (default), or seperate, based on a toggle.
func _get_tool_buttons():
return [
[msg, msg.bind("yes"), msg.bind("no")],
]
func msg(msg := "Default Message"):
print("Got: ", msg)
func doit():
pass
Changes
1.4
- Added Signal support.
- Added support for multiple buttons in the same row.
- Added automatically generated buttons for testing public methods.
- Added automatically generated buttons for testing argumentless signals.
- Auto tint method buttons blue and signal buttons yellow.
- Lot's of little fixes.
1.3
- Added
@SELECT_AND_EDIT::file_path,@EDIT_RESOURCE::file_path,@SELECT_FILE::file_path.
1.2
- Added 'Print Meta' button, which will print all meta data in an object.
1.1
- Updated for Godot
4.0.alpha2 - Added
Callablesupportcalltexticontintlock:{ text="Callable", call=func(): print("From Callable with love") } - Changed
disabledtolock - Bottom buttons are alphabetically sorted.