You can create a screen attribute.
Edit your Question Screen and you should see a "screen attribute" field (directly underneath the Screen Entity field). Click create and OPM will create an attribute like "Screen X has been displayed". This is set to unknown initially. Once Screen X has been submitted then it will be set to true. It is a special type of built-in/system attribute called a "screen attribute" that is managed by the engine at run-time. You can't edit the rule for this (but you shouldn't need to).
Then, for all of the controls on Screen X you can use this screen attribute to do exactly that - initially you want the controls to be editable and then as soon as the screen is submitted you want them to be read only. So for each control find the "Read Only" section (directly underneath the "Visibility" section). Choose the attribute "Screen X has been displayed" and set the default state (if attribute is unknown or uncertain) to "Editable".
If you want to include this with validation or extra conditions then you can just write the condtions in another rule and use this instead.. such as:
Screen X should be set to read only if
...Screen X has been displayed and
...Screen X has been validated... etc...
Hope this helps, its the simplest (and out of the box) way to solve the problem. Let me know if you have any more questions about this.