There are two ways to make blueprints communicate with one another: casting and variables.
First the Casting. You should make a variable of the Widget type, which I assume is the type of the blueprint that Main_Menu is, if not, simply change it. The variable should be a reference to the widget.
You can either create the Main_Menu widget here or elsewhere. You want to set the Main_Menu variable equal to the created widget. If you chose to create it elsewhere, you can use the techniques you learn here to help you get another blueprint to set the reference in this blueprint equal to what you created.
You then drag off of the Main Menu variable output and type in Cast to Main_Menu. What casting does is check whether or not the object being passed into the cast is a member or child of that class. In this case, we are checking to see if the widget we stored in the Main_Menu variable is a member of the Main_Menu class.
After that, you can then drag off of the output As Main Menu and type in the name of your function, in this case its called Save My Game. If a cast is successful, you can access any variables and functions in that class and manipulate it as you would if you were in that class’s blueprint. And thats how you would go about communicating between blueprints using casts.
However, there is an easier way using a more specific variable type. If we changed the variable type of Main_Menu directly to the Main_Menu class, we can access all of the variables and functions of Main_Menu by dragging off of the output of the variable instead.
So yeah thats the basics on inter-blueprint communication. Using a more specific variable type is much quicker and is cleaner than having to recast objects multiple times to access their functions and variables but its not a one-size-fits-all solution like using a cast.