diff --git a/e2e_tests/test_apps/basic.py b/e2e_tests/test_apps/basic.py index dee825f0e..514b3c4a1 100644 --- a/e2e_tests/test_apps/basic.py +++ b/e2e_tests/test_apps/basic.py @@ -177,7 +177,7 @@ class BasicApp(App, css_path="basic.css"): app = BasicApp() if __name__ == "__main__": - app.run() + app.run(quit_after=1) # from textual.geometry import Region # from textual.color import Color diff --git a/src/textual/app.py b/src/textual/app.py index d60aecde1..74ea4aa6f 100644 --- a/src/textual/app.py +++ b/src/textual/app.py @@ -539,10 +539,20 @@ class App(Generic[ReturnType], DOMNode): keys, action, description, show=show, key_display=key_display ) - def run(self) -> ReturnType | None: - """The entry point to run a Textual app.""" + def run(self, quit_after: float | None = None) -> ReturnType | None: + """The main entry point for apps. + + Args: + quit_after (float | None, optional): Quit after a given number of seconds, or None + to run forever. Defaults to None. + + Returns: + ReturnType | None: _description_ + """ async def run_app() -> None: + if quit_after is not None: + self.set_timer(quit_after, self.shutdown) await self.process_messages() if _ASYNCIO_GET_EVENT_LOOP_IS_DEPRECATED: diff --git a/src/textual/screen.py b/src/textual/screen.py index d81297ca9..b8f6af01f 100644 --- a/src/textual/screen.py +++ b/src/textual/screen.py @@ -53,6 +53,7 @@ class Screen(Widget): @property def is_current(self) -> bool: + """Check if this screen is current (i.e. visible to user).""" return self.app.screen is self @property