button.get_global_transform().get_origin()
This will give you the top left coordinate of that control in global (screen) coordinates.
Other alternative designs might include nesting hidden elements behind the buttons, and using hide and show.
Yet another is that Controls are CanvasItems, so you can invoke update()
and write your own _draw()
method. Things can be locally draw within whatever container or panel that may wrap up the button itself, and it should appear underneath since it would be the parent node.