If you must use
Tweens, you could do something like this.
func parabolic_movement(target_node, start_x, end_x, start_y, end_y, duration):
# tween x position linearly across duration
tween1.interpolate_property(target_node, "global_position:x", start_x, end_x, duration, Tween.TRANS_LINEAR, Tween.TRANS_LINEAR)
# tween y position in two parts, each across duration/2
# first tween upwards and wait for the tween to finish
tween2.interpolate_property(target_node, "global_position:y", start_y, end_y, duration/2, Tween.TRANS_SINE, Tween.EASE_OUT)
# then tween downwards
tween2.interpolate_property(target_node, "global_position:y", end_y, start_y, duration/2, Tween.TRANS_SINE, Tween.EASE_IN)
But typically I would just code this kind of movement directly in
_physics_process() using variables to represent velocity, acceleration, and gravity.