omz:forum

    • Register
    • Login
    • Search
    • Recent
    • Popular

    Welcome!

    This is the community forum for my apps Pythonista and Editorial.

    For individual support questions, you can also send an email. If you have a very short question or just want to say hello — I'm @olemoritz on Twitter.


    MultisceneTest with multiple files

    Pythonista
    3
    4
    3038
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • mrcoxall
      mrcoxall last edited by

      I am looking to use the code for creating multiple scenes ( from here https://gist.github.com/omz/4059061 ) but I would like to seperate the code over several files. I want the make sure it will work over several files, so I can have students working on different scenes and then bring everything together.

      I have it working with 2 files, Main.py and Scene_Manager.py.
      ( https://github.com/Mr-Coxall/MultisceneTest )

      What I would like to do is remove the 3 scene classes from main and move them to the 3 scene files. Not sure what I am doing wrong to get it working. I have tried various "import" statements but I can not get it working.

      1 Reply Last reply Reply Quote 0
      • JonB
        JonB last edited by JonB

        The way you are headed, scene1.py needs to import from scene and scene2.
        scene2 needs to import from scene and scene3.
        scene3 needs to import from scene and scene1.

        This sets up a nasty circular import, but as long as you don't put any executable code outside of the class statements, which refernces anything that is imported, you should be ok.... although if you forget that rule later, it will make for confusing error messages.

        Your main would import from scene1, in order to get access to Scene1 class.

        Only the main needs to import from multiscene, since nobody else needs to instantiate a multiscene object.

        I would suggest that MultiScene sets the main_scene attribute of new_scene in switch_scene

        	def switch_scene(self, new_scene):
        		self.active_scene = new_scene
                        new_scene.main_scene=self
        		new_scene.setup()
        

        so that you don't need to rely on globals (the scenes would then use self.main_scene.switch_scene(...))

        Another approach that avoids circular imports would be to do all the imports in main, instantiate the scenes, and set a next_scene attribute(for obvious reasons you cannot have this in the constructor, since you would not be able to create all three at once) pointing to the next scene to present. This also makes it easier to stitch together multiple students contributions, since an individual level or whatever does not need to know what level comes next, rather this is defined in main. (you could also def a next_level() in main which cycles through the classes... then each scene simply calls next_level())

        1 Reply Last reply Reply Quote 0
        • ccc
          ccc last edited by ccc

          My recommendation would be that you change your scene naming from: FirstScene, SecondScene, ThirdScene to Scene_0, Scene_1, Scene_2, Scene_3 so that your program can find scenes programmatically at startup time. Each time your students add new scenes, the program could find them automagically.

          1 Reply Last reply Reply Quote 0
          • ccc
            ccc last edited by ccc

            https://github.com/Mr-Coxall/MultisceneTest/pulls contains 5 pull requests... If you accept them all and then you run SceneSwitcher, you should get the requested functionality. It will load up to 999 scenes (Scene0.Scene0, Scene1.Scene1, etc.) from separate .py files that could be independently created by independent teams. Each scene can also run standalone to ease development.

            I know this works on the Beta but I can not be sure that it works on Pythonista v1.5.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post
            Powered by NodeBB Forums | Contributors