def pick_widget(self):
        """Display form; return widget instantiation data."""
        self.widget_data = None

        self.semitransp_obj.draw()

        ### loop until running attribute is set to False

        self.running = True

        ## TODO it seems the loop holder doesn't need
        ## to be referenced in an attribute here, but can
        ## be in a local variable, so make the change;
        self.loop_holder = self

        while True:

            try:

                while self.running:

                    ### perform various checkups for this frame;
                    ###
                    ### stuff like maintaing a constant framerate and more
                    SERVICES_NS.frame_checkups()

                    ### execute the handle_input/update/draw methods
                    ###
                    ### the SwitchLoopException thrown when focusing in and
                    ### out of some widgets is caught in the try clause;

                    self.loop_holder.handle_input()
                    self.loop_holder.update()
                    self.loop_holder.draw()

                ## if we leave the inner loop, also exit the outer one
                break

            except SwitchLoopException as err:

                ## use the loop holder in the err
                ## attribute of same name
                self.loop_holder = err.loop_holder

            ### we don't need to catch the QuitAppException,
            ### since it is caught in the main loop


        ###
        return self.widget_data
Display form; return widget instantiation data.
nodezator/editing/widgetpicker/main.py