def create_glib_loop(self): # clear flags self.timeout_error = False self.loop = GLibEventLoop() loop = self.loop.active_main_loop context = loop.get_context() # This is prevention from running loop indefinitely source = GLib.timeout_source_new_seconds(2) source.set_callback(self._quit_loop, loop) source.attach(context)
def setup(self, data): """Construct all the objects required to implement this interface. This method must be provided by all subclasses. """ # Use GLib event loop for the Simpleline TUI loop = GLibEventLoop() App.initialize(event_loop=loop) loop.set_quit_callback(tui_quit_callback) scheduler = App.get_scheduler() scheduler.quit_screen = YesNoDialog(self.quitMessage) # tell python-meh it should use our raw_input meh_io_handler = meh.ui.text.IOHandler( in_func=self._get_meh_input_func) self._meh_interface.set_io_handler(meh_io_handler) # register handlers for various messages loop = App.get_event_loop() loop.register_signal_handler(ExceptionSignal, exception_msg_handler) loop.register_signal_handler(SendMessageSignal, self._handle_show_message) _hubs = self._list_hubs() # First, grab a list of all the standalone spokes. spokes = self._collectActionClasses(self.paths["spokes"], StandaloneSpoke) actionClasses = self._orderActionClasses(spokes, _hubs) for klass in actionClasses: obj = klass(data, self.storage, self.payload) # If we are doing a kickstart install, some standalone spokes # could already be filled out. In that case, we do not want # to display them. if self._is_standalone(obj) and obj.completed: del (obj) continue if hasattr(obj, "set_path"): obj.set_path("spokes", self.paths["spokes"]) obj.set_path("categories", self.paths["categories"]) should_schedule = obj.setup(self.ENVIRONMENT) if should_schedule: scheduler.schedule_screen(obj)
from simpleline import App from simpleline.event_loop.glib_event_loop import GLibEventLoop from simpleline.render.screen import UIScreen from simpleline.render.screen_handler import ScreenHandler from simpleline.render.widgets import TextWidget class HelloWorld(UIScreen): def __init__(self): super().__init__(title="Hello World with GLib") def refresh(self, args=None): super().refresh() self.window.add_with_separator(TextWidget("Body text")) if __name__ == "__main__": # Create Glib event loop. glib_loop = GLibEventLoop() # Use glib event loop instead of the original one. # Everything else should behave the same as with the original Simpleline loop. App.initialize(event_loop=glib_loop) screen = HelloWorld() ScreenHandler.schedule_screen(screen) # Run the application. App.run()