Files
textual/docs/guide/devtools.md
2022-09-04 20:40:12 +01:00

3.6 KiB

Devtools

!!! note inline end

If you don't have the `textual` command on your path, you may have forgotten so install with the `dev` switch.

See [getting started](../getting_started.md#installation) for details.

Textual comes with a command line application of the same name. The textual command is a super useful tool that will help you to build apps.

Take a moment to look through the available sub-commands. There will be even more helpful tools here in the future.

textual --help

Run

You can run Textual apps with the run subcommand. If you supply a path to a Python file it will load and run the application.

textual run my_app.py

The run sub-command assumes you have an App instance called app in the global scope of your Python file. If the application is called something different, you can specify it with a colon following the filename:

textual run my_app.py:alternative_app

!!! note

If the Python file contains a call to app.run() then you can launch the file as you normally would any other Python program. Running your app via `textual run` will give you access to a few Textual features such as live editing of CSS files.

Console

When running a terminal application, you will generally no longer be able to use print when debugging (or log to the console). This is because anything you write to standard output would overwrite application content, making it unreadable. Fortunately Textual supplies a debug console of its own which has some super helpful features.

To use the console, open up two terminal emulators. Run the following in one of the terminals:

textual console

You should see the Textual devtools welcome message:

In the other console, run your application with textual run and the --dev switch:

textual run --dev my_app.py

Anything you print from your application will be displayed in the console window. Textual will also write log messages to this window which may be helpful when debugging your application.

Verbosity

Textual writes log messages to inform you about certain events, such as when the user presses a key or clicks on the terminal. To avoid swamping you with too much information, some events are marked as "verbose" and will be excluded from the logs. If you want to see these log messages, you can add the -v switch.

textual console -v

Textual log

In addition to simple strings, Textual console supports Rich formatting. To write rich logs, import log as follows:

from textual import log

This method will pretty print data structures (like lists and dicts) as well as Rich renderables. Here are some examples:

log("Hello, World")  # simple string
log(locals())  # Log local variables
log(children=self.children, pi=3.141592)  # key/values
log(self.tree)  # Rich renderables

Textual log messages may contain console Markup:

log("[bold red]DANGER![/] We're having too much fun")

Log method

There's a convenient shortcut to log available on the App and Widget objects you can use in event handlers:

from textual.app import App

class LogApp(App):

    def on_load(self):
        self.log("In the log handler!", pi=3.141529)

    def on_mount(self):
        self.log(self.tree)

app = LogApp()
if __name__ == "__main__":
    app.run()