-
Hello, from textual import on, work
from textual.reactive import reactive
from textual.screen import Screen
from textual.app import App, ComposeResult
from textual.widgets import Button, Footer, Header, Static, Input
from typing import Optional
class ScreenA(Screen[int]):
@on(Input.Submitted)
def handle_input_submit(self, event: Input.Submitted) -> None:
self.dismiss(7)
def compose(self) -> ComposeResult:
yield Input()
class ScreenB(Screen[str]):
def on_button_pressed(self, event: Button.Pressed) -> None:
self.dismiss("screenb")
def compose(self) -> ComposeResult:
yield Button("Dismiss ScreenB")
class TestApp(App):
int_output: reactive[Optional[int]] = reactive(None, recompose=True)
str_output: reactive[Optional[str]] = reactive(None, recompose=True)
@work
async def on_mount(self) -> None:
self.int_output = await self.push_screen(ScreenA())
self.str_output = await self.push_screen(ScreenB())
# Version A
# def on_mount(self) -> None:
# def cbA(value: Optional[int]) -> None:
# self.int_output = value
#
# def cbB(value: Optional[str]) -> None:
# self.str_output = value
#
# self.push_screen(ScreenA(), cbA)
# self.push_screen(ScreenB(), cbB)
# Version B
# def on_mount(self) -> None:
# def cbA(value: Optional[int]) -> None:
# self.int_output = value
#
# def cbB(value: Optional[str]) -> None:
# self.str_output = value
#
# self.push_screen(ScreenB(), cbB)
#
# self.push_screen(ScreenA(), cbA)
def compose(self) -> ComposeResult:
yield Header()
yield Static(str(self.int_output))
yield Static(str(self.str_output))
yield Footer()
app = TestApp()
app.run() |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 2 replies
-
Note that that example doesn't use |
Beta Was this translation helpful? Give feedback.
Note that that example doesn't use
push_screen
, it usespush_screen_wait
.