I have a proof-of-concept of making pygame code run in browser.
You may notice that things aren't lined up correctly. Certain things get lost in translation using pyjs. Namely, getters and setters.
It looks like Transcrypt does a better job of that, but after fiddling with pyjsdl, it looks like the pyjs compilable pygame rewrite seriously uses the pyjs library. Not so simple to replace pyjs code with transcrypt code.
That's what I'll explore today.
Transcrypt and game.js together is a plausible route. However, it'd be a lot of work and how good the final product would look/feel is unknown. The API between game.js and pygame is different enough to make even hello world complicated to recreate. Missing is an ellipsis draw method. The size of the screen is also supposed to be dictacted by CSS (as it is in that link just given).