App
Here you will find the App class, which is the base class for Textual apps.
See app basics for how to build Textual apps.
AutopilotCallbackType
module-attribute
¶
Signature for valid callbacks that can be used to control apps.
CSSPathType
module-attribute
¶
Valid ways of specifying paths to CSS files.
ActiveModeError
class
¶
Bases: ModeError
Raised when attempting to remove the currently active mode.
App
class
¶
Bases: Generic[ReturnType]
, DOMNode
The base class for Textual Applications.
Parameters
Parameter | Default | Description |
---|---|---|
driver_class
Type[Driver] | None
|
None
|
Driver class or |
css_path
CSSPathType | None
|
None
|
Path to CSS or |
watch_css
bool
|
False
|
Reload CSS if the files changed. This is set automatically if
you are using |
Raises
Type | Description |
---|---|
CssPathError
|
When the supplied CSS path(s) are an unexpected type. |
AUTO_FOCUS
class-attribute
¶
A selector to determine what to focus automatically when a screen is activated.
The widget focused is the first that matches the given CSS selector.
Setting to None
or ""
disables auto focus.
COMMANDS
class-attribute
¶
Command providers used by the command palette.
Should be a set of command.Provider classes.
CSS
class-attribute
¶
Inline CSS, useful for quick scripts. This is loaded after CSS_PATH, and therefore takes priority in the event of a specificity clash.
ENABLE_COMMAND_PALETTE
class-attribute
¶
Should the command palette be enabled for the application?
MODES
class-attribute
¶
SCREENS
class-attribute
¶
Screens associated with the app for the lifetime of the app.
SUB_TITLE
instance-attribute
class-attribute
¶
A class variable to set the default sub-title for the application.
To update the sub-title while the app is running, you can set the sub_title attribute.
See also the Screen.SUB_TITLE
attribute.
TITLE
instance-attribute
class-attribute
¶
A class variable to set the default title for the application.
To update the title while the app is running, you can set the title attribute.
See also the Screen.TITLE
attribute.
animation_level
instance-attribute
¶
Determines what type of animations the app will display.
ansi_theme
property
¶
The ANSI TerminalTheme currently being used.
Defines how colors defined as ANSI (e.g. magenta
) inside Rich renderables
are mapped to hex codes.
ansi_theme_dark
instance-attribute
class-attribute
¶
Maps ANSI colors to hex colors using a Rich TerminalTheme object while in dark mode.
ansi_theme_light
instance-attribute
class-attribute
¶
Maps ANSI colors to hex colors using a Rich TerminalTheme object while in light mode.
app_focus
instance-attribute
class-attribute
¶
Indicates if the app has focus.
When run in the terminal, the app always has focus. When run in the web, the app will get focus when the terminal widget has focus.
app_resume_signal
instance-attribute
¶
The signal that is published when the app is resumed after a suspend.
When the app is resumed after a
App.suspend
call this signal will be
published;
subscribe to this signal to
perform work after the app has resumed.
app_suspend_signal
instance-attribute
¶
The signal that is published when the app is suspended.
When App.suspend
is called this signal
will be published;
subscribe to this signal to
perform work before the suspension takes place.
children
property
¶
A view onto the app's immediate children.
This attribute exists on all widgets. In the case of the App, it will only ever contain a single child, which will be the currently active screen.
Returns
Type | Description |
---|---|
Sequence['Widget']
|
A sequence of widgets. |
cursor_position
instance-attribute
¶
The position of the terminal cursor in screen-space.
This can be set by widgets and is useful for controlling the positioning of OS IME and emoji popup menus.
dark
instance-attribute
class-attribute
¶
focused
property
¶
The widget that is focused on the currently active screen, or None
.
Focused widgets receive keyboard input.
Returns
Type | Description |
---|---|
Widget | None
|
The currently focused widget, or |
is_headless
property
¶
Is the app running in 'headless' mode?
Headless mode is used when running tests with run_test.
namespace_bindings
property
¶
Get currently active bindings.
If no widget is focused, then app-level bindings are returned. If a widget is focused, then any bindings present in the active screen and app are merged and returned.
This property may be used to inspect current bindings.
Returns
Type | Description |
---|---|
dict[str, tuple[DOMNode, Binding]]
|
A map of keys to a tuple containing the DOMNode and Binding that key corresponds to. |
return_code
property
¶
return_value
property
¶
The return value of the app, or None
if it has not yet been set.
The return value is set when calling exit.
screen
property
¶
The current active screen.
Returns
Type | Description |
---|---|
Screen[object]
|
The currently active (visible) screen. |
Raises
Type | Description |
---|---|
ScreenStackError
|
If there are no screens on the stack. |
screen_stack
property
¶
scroll_sensitivity_x
instance-attribute
¶
Number of columns to scroll in the X direction with wheel or trackpad.
scroll_sensitivity_y
instance-attribute
¶
Number of lines to scroll in the Y direction with wheel or trackpad.
size
property
¶
sub_title
instance-attribute
class-attribute
¶
The sub-title for the application.
The initial value for sub_title
will be set to the SUB_TITLE
class variable if it exists, or
an empty string if it doesn't.
Sub-titles are typically used to show the high-level state of the app, such as the current mode, or path to the file being worked on.
Assign a new value to this attribute to change the sub-title. The new value is always converted to string.
title
instance-attribute
class-attribute
¶
The title for the application.
The initial value for title
will be set to the TITLE
class variable if it exists, or
the name of the app if it doesn't.
Assign a new value to this attribute to change the title. The new value is always converted to string.
use_command_palette
instance-attribute
¶
A flag to say if the application should use the command palette.
If set to False
any call to
action_command_palette
will be ignored.
workers
property
¶
action_add_class
async
¶
action_back
async
¶
An action to go back to the previous screen (pop the current screen).
Note
If there is no screen to go back to, this is a non-operation (in other words it's safe to call even if there are no other screens on the stack.)
action_check_bindings
async
¶
action_focus
async
¶
action_pop_screen
async
¶
An action to remove the topmost screen and makes the new topmost screen active.
action_push_screen
async
¶
action_remove_class
async
¶
action_screenshot
method
¶
action_suspend_process
method
¶
Suspend the process into the background.
Note
On Unix and Unix-like systems a SIGTSTP
is sent to the
application's process. Currently on Windows and when running
under Textual Web this is a non-operation.
action_switch_screen
async
¶
action_toggle_class
async
¶
add_mode
method
¶
Adds a mode and its corresponding base screen to the app.
Parameters
Parameter | Default | Description |
---|---|---|
mode
str
|
required | The new mode. |
base_screen
str | Screen | Callable[[], Screen]
|
required | The base screen associated with the given mode. |
Raises
Type | Description |
---|---|
InvalidModeError
|
If the name of the mode is not valid/duplicated. |
animate
method
¶
def animate(
self,
attribute,
value,
*,
final_value=...,
duration=None,
speed=None,
delay=0.0,
easing=DEFAULT_EASING,
on_complete=None,
level="full"
):
Animate an attribute.
See the guide for how to use the animation system.
Parameters
Parameter | Default | Description |
---|---|---|
attribute
str
|
required | Name of the attribute to animate. |
value
float | Animatable
|
required | The value to animate to. |
final_value
object
|
...
|
The final value of the animation. |
duration
float | None
|
None
|
The duration (in seconds) of the animation. |
speed
float | None
|
None
|
The speed of the animation. |
delay
float
|
0.0
|
A delay (in seconds) before the animation starts. |
easing
EasingFunction | str
|
DEFAULT_EASING
|
An easing method. |
on_complete
CallbackType | None
|
None
|
A callable to invoke when the animation is finished. |
level
AnimationLevel
|
'full'
|
Minimum level required for the animation to take place (inclusive). |
batch_update
method
¶
A context manager to suspend all repaints until the end of the batch.
begin_capture_print
method
¶
Capture content that is printed (or written to stdout / stderr).
If printing is captured, the target
will be sent an events.Print message.
Parameters
Parameter | Default | Description |
---|---|---|
target
MessageTarget
|
required | The widget where print content will be sent. |
stdout
bool
|
True
|
Capture stdout. |
stderr
bool
|
True
|
Capture stderr. |
bell
method
¶
Play the console 'bell'.
For terminals that support a bell, this typically makes a notification or error sound. Some terminals may make no sound or display a visual bell indicator, depending on configuration.
bind
method
¶
Bind a key to an action.
Parameters
Parameter | Default | Description |
---|---|---|
keys
str
|
required | A comma separated list of keys, i.e. |
action
str
|
required | Action to bind to. |
description
str
|
''
|
Short description of action. |
show
bool
|
True
|
Show key in UI. |
key_display
str | None
|
None
|
Replacement text for key, or None to use default. |
call_from_thread
method
¶
Run a callable from another thread, and return the result.
Like asyncio apps in general, Textual apps are not thread-safe. If you call methods or set attributes on Textual objects from a thread, you may get unpredictable results.
This method will ensure that your code runs within the correct context.
Tip
Consider using post_message which is also thread-safe.
Parameters
Parameter | Default | Description |
---|---|---|
callback
Callable[..., CallThreadReturnType | Awaitable[CallThreadReturnType]]
|
required | A callable to run. |
*args
Any
|
()
|
Arguments to the callback. |
**kwargs
Any
|
{}
|
Keyword arguments for the callback. |
Raises
Type | Description |
---|---|
RuntimeError
|
If the app isn't running or if this method is called from the same thread where the app is running. |
Returns
Type | Description |
---|---|
CallThreadReturnType
|
The result of the callback. |
capture_mouse
method
¶
Send all mouse events to the given widget or disable mouse capture.
Parameters
Parameter | Default | Description |
---|---|---|
widget
Widget | None
|
required | If a widget, capture mouse event, or |
check_bindings
async
¶
Handle a key press.
This method is used internally by the bindings system, but may be called directly if you wish to simulate a key being pressed.
Parameters
Parameter | Default | Description |
---|---|---|
key
str
|
required | A key. |
priority
bool
|
False
|
If |
Returns
Type | Description |
---|---|
bool
|
True if the key was handled by a binding, otherwise False |
compose
method
¶
Yield child widgets for a container.
This method should be implemented in a subclass.
copy_to_clipboard
method
¶
Copy text to the clipboard.
Note
This does not work on macOS Terminal, but will work on most other terminals.
Parameters
Parameter | Default | Description |
---|---|---|
text
str
|
required | Text you wish to copy to the clipboard. |
end_capture_print
method
¶
End capturing of prints.
Parameters
Parameter | Default | Description |
---|---|---|
target
MessageTarget
|
required | The widget that was capturing prints. |
exit
method
¶
Exit the app, and return the supplied result.
Parameters
Parameter | Default | Description |
---|---|---|
result
ReturnType | None
|
None
|
Return value. |
return_code
int
|
0
|
The return code. Use non-zero values for error codes. |
message
RenderableType | None
|
None
|
Optional message to display on exit. |
export_screenshot
method
¶
Export an SVG screenshot of the current screen.
See also save_screenshot which writes the screenshot to a file.
Parameters
Parameter | Default | Description |
---|---|---|
title
str | None
|
None
|
The title of the exported screenshot or None to use app title. |
get_child_by_id
method
¶
Get the first child (immediate descendent) of this DOMNode with the given ID.
Parameters
Parameter | Default | Description |
---|---|---|
id
str
|
required | The ID of the node to search for. |
expect_type
type[ExpectType] | None
|
None
|
Require the object be of the supplied type,
or use |
Returns
Type | Description |
---|---|
ExpectType | Widget
|
The first child of this node with the specified ID. |
Raises
Type | Description |
---|---|
NoMatches
|
If no children could be found for this ID. |
WrongType
|
If the wrong type was found. |
get_child_by_type
method
¶
get_css_variables
method
¶
get_driver_class
method
¶
Get a driver class for this platform.
This method is called by the constructor, and unlikely to be required when building a Textual app.
Returns
Type | Description |
---|---|
Type[Driver]
|
A Driver class which manages input and display. |
get_key_display
method
¶
For a given key, return how it should be displayed in an app (e.g. in the Footer widget). By key, we refer to the string used in the "key" argument for a Binding instance. By overriding this method, you can ensure that keys are displayed consistently throughout your app, without needing to add a key_display to every binding.
Parameters
Parameter | Default | Description |
---|---|---|
key
str
|
required | The binding key string. |
Returns
Type | Description |
---|---|
str
|
The display string for the input key. |
get_loading_widget
method
¶
Get a widget to be used as a loading indicator.
Extend this method if you want to display the loading state a little differently.
Returns
Type | Description |
---|---|
Widget
|
A widget to display a loading state. |
get_screen
method
¶
get_widget_at
method
¶
get_widget_by_id
method
¶
Get the first descendant widget with the given ID.
Performs a breadth-first search rooted at the current screen.
It will not return the Screen if that matches the ID.
To get the screen, use self.screen
.
Parameters
Parameter | Default | Description |
---|---|---|
id
str
|
required | The ID to search for in the subtree |
expect_type
type[ExpectType] | None
|
None
|
Require the object be of the supplied type, or None for any type. Defaults to None. |
Returns
Type | Description |
---|---|
ExpectType | Widget
|
The first descendant encountered with this ID. |
Raises
Type | Description |
---|---|
NoMatches
|
if no children could be found for this ID |
WrongType
|
if the wrong type was found. |
install_screen
method
¶
Install a screen.
Installing a screen prevents Textual from destroying it when it is no longer on the screen stack. Note that you don't need to install a screen to use it. See push_screen or switch_screen to make a new screen current.
Parameters
Parameter | Default | Description |
---|---|---|
screen
Screen
|
required | Screen to install. |
name
str
|
required | Unique name to identify the screen. |
Raises
Type | Description |
---|---|
ScreenError
|
If the screen can't be installed. |
Returns
Type | Description |
---|---|
None
|
An awaitable that awaits the mounting of the screen and its children. |
is_mounted
method
¶
is_screen_installed
method
¶
mount
method
¶
Mount the given widgets relative to the app's screen.
Parameters
Parameter | Default | Description |
---|---|---|
*widgets
Widget
|
()
|
The widget(s) to mount. |
before
int | str | Widget | None
|
None
|
Optional location to mount before. An |
after
int | str | Widget | None
|
None
|
Optional location to mount after. An |
Returns
Type | Description |
---|---|
AwaitMount
|
An awaitable object that waits for widgets to be mounted. |
Raises
Type | Description |
---|---|
MountError
|
If there is a problem with the mount request. |
Note
Only one of before
or after
can be provided. If both are
provided a MountError
will be raised.
mount_all
method
¶
Mount widgets from an iterable.
Parameters
Parameter | Default | Description |
---|---|---|
widgets
Iterable[Widget]
|
required | An iterable of widgets. |
before
int | str | Widget | None
|
None
|
Optional location to mount before. An |
after
int | str | Widget | None
|
None
|
Optional location to mount after. An |
Returns
Type | Description |
---|---|
AwaitMount
|
An awaitable object that waits for widgets to be mounted. |
Raises
Type | Description |
---|---|
MountError
|
If there is a problem with the mount request. |
Note
Only one of before
or after
can be provided. If both are
provided a MountError
will be raised.
notify
method
¶
Create a notification.
Tip
This method is thread-safe.
Parameters
Parameter | Default | Description |
---|---|---|
message
str
|
required | The message for the notification. |
title
str
|
''
|
The title for the notification. |
severity
SeverityLevel
|
'information'
|
The severity of the notification. |
timeout
float
|
Notification.timeout
|
The timeout (in seconds) for the notification. |
The notify
method is used to create an application-wide
notification, shown in a Toast
,
normally originating in the bottom right corner of the display.
Notifications can have the following severity levels:
information
warning
error
The default is information
.
Example
# Show an information notification.
self.notify("It's an older code, sir, but it checks out.")
# Show a warning. Note that Textual's notification system allows
# for the use of Rich console markup.
self.notify(
"Now witness the firepower of this fully "
"[b]ARMED[/b] and [i][b]OPERATIONAL[/b][/i] battle station!",
title="Possible trap detected",
severity="warning",
)
# Show an error. Set a longer timeout so it's noticed.
self.notify("It's a trap!", severity="error", timeout=10)
# Show an information notification, but without any sort of title.
self.notify("It's against my programming to impersonate a deity.", title="")
panic
method
¶
Exits the app and display error message(s).
Used in response to unexpected errors. For a more graceful exit, see the exit method.
Parameters
Parameter | Default | Description |
---|---|---|
*renderables
RenderableType
|
()
|
Text or Rich renderable(s) to display on exit. |
pop_screen
method
¶
post_display_hook
method
¶
Called immediately after a display is done. Used in tests.
push_screen
method
¶
Push a new screen on the screen stack, making it the current screen.
Parameters
Parameter | Default | Description |
---|---|---|
screen
Screen[ScreenResultType] | str
|
required | A Screen instance or the name of an installed screen. |
callback
ScreenResultCallbackType[ScreenResultType] | None
|
None
|
An optional callback function that will be called if the screen is dismissed with a result. |
wait_for_dismiss
bool
|
False
|
If |
Raises
Type | Description |
---|---|
NoActiveWorker
|
If using |
Returns
Type | Description |
---|---|
AwaitMount | asyncio.Future[ScreenResultType]
|
An optional awaitable that awaits the mounting of the screen and its children, or an asyncio Future to await the result of the screen. |
push_screen_wait
async
¶
Push a screen and wait for the result (received from Screen.dismiss
).
Note that this method may only be called when running in a worker.
Parameters
Parameter | Default | Description |
---|---|---|
screen
Screen[ScreenResultType] | str
|
required | A screen or the name of an installed screen. |
Returns
Type | Description |
---|---|
ScreenResultType | Any
|
The screen's result. |
recompose
async
¶
Recompose the widget.
Recomposing will remove children and call self.compose
again to remount.
refresh
method
¶
Refresh the entire screen.
Parameters
Parameter | Default | Description |
---|---|---|
repaint
bool
|
True
|
Repaint the widget (will call render() again). |
layout
bool
|
False
|
Also layout widgets in the view. |
recompose
bool
|
False
|
Re-compose the widget (will remove and re-mount children). |
Returns
Type | Description |
---|---|
Self
|
The |
refresh_css
method
¶
Refresh CSS.
Parameters
Parameter | Default | Description |
---|---|---|
animate
bool
|
True
|
Also execute CSS animations. |
remove_mode
method
¶
Removes a mode from the app.
Screens that are running in the stack of that mode are scheduled for pruning.
Parameters
Parameter | Default | Description |
---|---|---|
mode
str
|
required | The mode to remove. It can't be the active mode. |
Raises
Type | Description |
---|---|
ActiveModeError
|
If trying to remove the active mode. |
UnknownModeError
|
If trying to remove an unknown mode. |
run
method
¶
def run(
self,
*,
headless=False,
inline=False,
inline_no_clear=False,
mouse=True,
size=None,
auto_pilot=None
):
Run the app.
Parameters
Parameter | Default | Description |
---|---|---|
headless
bool
|
False
|
Run in headless mode (no output). |
inline
bool
|
False
|
Run the app inline (under the prompt). |
inline_no_clear
bool
|
False
|
Don't clear the app output when exiting an inline app. |
mouse
bool
|
True
|
Enable mouse support. |
size
tuple[int, int] | None
|
None
|
Force terminal size to |
auto_pilot
AutopilotCallbackType | None
|
None
|
An auto pilot coroutine. |
Returns
Type | Description |
---|---|
ReturnType | None
|
App return value. |
run_action
async
¶
Perform an action.
Actions are typically associated with key bindings, where you wouldn't need to call this method manually.
Parameters
Parameter | Default | Description |
---|---|---|
action
str | ActionParseResult
|
required | Action encoded in a string. |
default_namespace
object | None
|
None
|
Namespace to use if not provided in the action, or None to use app. |
Returns
Type | Description |
---|---|
bool
|
True if the event has been handled. |
run_async
async
¶
def run_async(
self,
*,
headless=False,
inline=False,
inline_no_clear=False,
mouse=True,
size=None,
auto_pilot=None
):
Run the app asynchronously.
Parameters
Parameter | Default | Description |
---|---|---|
headless
bool
|
False
|
Run in headless mode (no output). |
inline
bool
|
False
|
Run the app inline (under the prompt). |
inline_no_clear
bool
|
False
|
Don't clear the app output when exiting an inline app. |
mouse
bool
|
True
|
Enable mouse support. |
size
tuple[int, int] | None
|
None
|
Force terminal size to |
auto_pilot
AutopilotCallbackType | None
|
None
|
An auto pilot coroutine. |
Returns
Type | Description |
---|---|
ReturnType | None
|
App return value. |
run_test
async
¶
def run_test(
self,
*,
headless=True,
size=(80, 24),
tooltips=False,
notifications=False,
message_hook=None
):
An asynchronous context manager for testing apps.
Tip
See the guide for testing Textual apps.
Use this to run your app in "headless" mode (no output) and drive the app via a Pilot object.
Parameters
Parameter | Default | Description |
---|---|---|
headless
bool
|
True
|
Run in headless mode (no output or input). |
size
tuple[int, int] | None
|
(80, 24)
|
Force terminal size to |
tooltips
bool
|
False
|
Enable tooltips when testing. |
notifications
bool
|
False
|
Enable notifications when testing. |
message_hook
Callable[[Message], None] | None
|
None
|
An optional callback that will be called each time any message arrives at any message pump in the app. |
save_screenshot
method
¶
Save an SVG screenshot of the current screen.
Parameters
Parameter | Default | Description |
---|---|---|
filename
str | None
|
None
|
Filename of SVG screenshot, or None to auto-generate a filename with the date and time. |
path
str | None
|
None
|
Path to directory for output. Defaults to current working directory. |
time_format
str | None
|
None
|
Date and time format to use if filename is None. Defaults to a format like ISO 8601 with some reserved characters replaced with underscores. |
Returns
Type | Description |
---|---|
str
|
Filename of screenshot. |
set_focus
method
¶
stop_animation
async
¶
suspend
method
¶
A context manager that temporarily suspends the app.
While inside the with
block, the app will stop reading input and
emitting output. Other applications will have full control of the
terminal, configured as it was before the app started running. When
the with
block ends, the application will start reading input and
emitting output again.
Raises
Type | Description |
---|---|
SuspendNotSupported
|
If the environment doesn't support suspending. |
Note
Suspending the application is currently only supported on Unix-like operating systems and Microsoft Windows. Suspending is not supported in Textual Web.
switch_mode
method
¶
Switch to a given mode.
Parameters
Parameter | Default | Description |
---|---|---|
mode
str
|
required | The mode to switch to. |
Returns
Type | Description |
---|---|
AwaitMount
|
An optionally awaitable object which waits for the screen associated with the mode to be mounted. |
Raises
Type | Description |
---|---|
UnknownModeError
|
If trying to switch to an unknown mode. |
switch_screen
method
¶
uninstall_screen
method
¶
Uninstall a screen.
If the screen was not previously installed then this method is a null-op. Uninstalling a screen allows Textual to delete it when it is popped or switched. Note that uninstalling a screen is only required if you have previously installed it with install_screen. Textual will also uninstall screens automatically on exit.
Parameters
Parameter | Default | Description |
---|---|---|
screen
Screen | str
|
required | The screen to uninstall or the name of a installed screen. |
Returns
Type | Description |
---|---|
str | None
|
The name of the screen that was uninstalled, or None if no screen was uninstalled. |
update_styles
method
¶
Immediately update the styles of this node and all descendant nodes.
Should be called whenever CSS classes / pseudo classes change. For example, when you hover over a button, the :hover pseudo class will be added, and this method is called to apply the corresponding :hover styles.
validate_sub_title
method
¶
Make sure the sub-title is set to a string.
ScreenStackError
class
¶
Bases: ScreenError
Raised when trying to manipulate the screen stack incorrectly.
SuspendNotSupported
class
¶
Bases: Exception
Raised if suspending the application is not supported.
This exception is raised if App.suspend
is called while
the application is running in an environment where this isn't supported.
get_system_commands
function
¶
Callable to lazy load the system commands.
Returns
Type | Description |
---|---|
type[SystemCommands]
|
System commands class. |