You can build the primary display using Godot's primitive drawing routines (see the documentation for CanvasItem - they'll mostly cover your needs). There isn't a ready-made drag-n-drop solution for basic shapes (except for rectangles and nine patch rects), though. You'll need to create scripts to call the drawing primitives for anything that's more complicated than a colored rectangle.
What I would do is create a scene for every single element (like altitude meter, horizon, speed meter etc). Then use background images you created in some graphics software package for the more complicated shapes that aren't just rectangles, and attach some scripts to each of the elements and override their _draw methods to overlay the numbers and lines so that the display elements can react to changing inputs and won't just display a static image.
For example, the following _draw method will overlay a display element such as a background texture or colored rectangle with 30 horizontal white lines that automatically adapt to the size of the display element. If you move or resize the background element, the lines will follow correctly. You can make them display in the Godot editor by using the "tool" keyword at the top of your script.
func _draw():
var white = Color(1.0, 1.0, 1.0) # rgb color
var r = get_rect()
var vertical_spacing = r.size.y / 30
var line_thickness = 2.0
for i in range(30):
var from = Vector2(0, i*vertical_spacing)
var to = Vector2(r.size.x, i*vertical_spacing)
draw_line(from, to, white, line_thickness)
It's fairly easy to draw Text (for the numbers) and arcs, too.
Doing it like that will take a while to do, but the upside is that you'll end up with basic display elements such as "altitude meter", "speed meter" etc that you can then use to build lots of different cockpit layouts.
If you export relevant parameters, you can then also change these parameters in the Godot editor instead of having to change them in the script. For example, try attaching the following script to a ColorRect and see what it does:
tool
extends ColorRect
# make this a constant - you'll have to change it in the script
const LINE_THICKNESS := 2.0
# make these parameters editable in the editor's inspector
export var line_color := Color(1.0, 1.0, 1.0) # white
export var line_count := 30 # default is 30 lines
func _draw():
var r = get_rect()
var vertical_spacing = r.size.y / line_count
for i in range(line_count):
var from = Vector2(0, i*vertical_spacing)
var to = Vector2(r.size.x, i*vertical_spacing)
draw_line(from, to, line_color, LINE_THICKNESS)