textual-window


Nametextual-window JSON
Version 0.5.2 PyPI version JSON
download
home_pageNone
SummaryA Textual widget for a floating, draggable window and included window bar/manager system.
upload_time2025-07-11 16:41:10
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords python textual tui widget window
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <picture>
  <source media="(prefers-color-scheme: dark)" srcset="https://github.com/user-attachments/assets/800de9df-be91-45ff-87eb-abcc1c19c5a9">
  <img src="https://github.com/user-attachments/assets/06b16b87-a37d-405c-b9fb-44ea2d89de5c">
</picture>

# Textual-Window

![badge](https://img.shields.io/badge/Linted-Ruff-blue&logo=ruff)
![badge](https://img.shields.io/badge/Formatted-Black-black)
![badge](https://img.shields.io/badge/Type_checked-MyPy-blue&logo=python)
![badge](https://img.shields.io/badge/Type_checked-Pyright-blue&logo=python)
![badge](https://img.shields.io/badge/License-MIT-blue)
[![Framework: Textual](https://img.shields.io/badge/framework-Textual-5967FF?logo=python)](https://www.textualize.io/)

Textual-Window is an extension library for [Textual](https://github.com/Textualize/textual).

It provides a Window widget, along with an included WindowBar and WindowSwitcher, that makes it
easy to create a desktop GUI-like experience inside of a TUI built with Textual.

Window widgets are floating, draggable, resizable, snappable, closable, and you can even cycle through them in a manner similar to alt-tab. It's like a mini desktop inside of your terminal. (Is it ridiculous? Yes, yes it is. But is it awesome? Also yes.)

## Features

- Drag, resize, and maximize windows. Close windows with ctrl+w.
- Windows can focus, and highlight to show which one is focused. Controls are passed from the highlighted window to its inner scrolling container.
- Included fully-automatic Window Bar (aka Task Bar). Don't worry about keeping track of the windows. Just compose and go. The library will track them for you.
- Included Window Switcher, to cycle window focus in a manner similar to alt-tab. The most recently focused window is always at the start (left side).
- Set the window's min and max size through Textual CSS as you normally would, and the window will respect those settings when resizing. Resizing can also be disabled per window.
- Windows snap to the terminal by default, toggle this on/off in real-time.
- WindowBar can toggle the dock between top and bottom of the screen in real-time.
- Window Bar has right-click context menus, one for each window, as well as a global context menu with options such as close/open all or snap/unsnap all.
- Set the window's starting location on the screen using plain descriptions (ie. right + bottom), as well as whether to initialize open or closed.
- An optional hamburger menu for custom callbacks - The window has a 'menu_options' argument. Pass in a dictionary of functions (label + callback) and these functions will appear in that window's hamburger menu. (If nothing is passed in, the menu is not shown).
- Smooth fade in/out animation adds a convincing touch.
- Create windows in all 3 ways textual supports - context manager, passing in a list of children, and custom Window objects.
- ...and many small QoL things too numerous to list here.

See the documentation for more details.

## Demo App

If you have uv or Pipx, you can immediately try the demo app:

```sh
uvx textual-window 
```

```sh
pipx run textual-window
```

## Documentation

### [Click here for documentation](https://edward-jazzhands.github.io/libraries/textual-window/)

## Video

https://github.com/user-attachments/assets/2bf5f4d9-f289-4e7f-b9ae-e91fd34c1ce3

## Questions, issues, suggestions?

Feel free to post an issue.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "textual-window",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "python, textual, tui, widget, window",
    "author": null,
    "author_email": "edward-jazzhands <ed.jazzhands@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/0a/fa/ce0ed05ed72f9d691d1c8f4475c931c1265dadacfbe5365eadc160955277/textual_window-0.5.2.tar.gz",
    "platform": null,
    "description": "<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/user-attachments/assets/800de9df-be91-45ff-87eb-abcc1c19c5a9\">\n  <img src=\"https://github.com/user-attachments/assets/06b16b87-a37d-405c-b9fb-44ea2d89de5c\">\n</picture>\n\n# Textual-Window\n\n![badge](https://img.shields.io/badge/Linted-Ruff-blue&logo=ruff)\n![badge](https://img.shields.io/badge/Formatted-Black-black)\n![badge](https://img.shields.io/badge/Type_checked-MyPy-blue&logo=python)\n![badge](https://img.shields.io/badge/Type_checked-Pyright-blue&logo=python)\n![badge](https://img.shields.io/badge/License-MIT-blue)\n[![Framework: Textual](https://img.shields.io/badge/framework-Textual-5967FF?logo=python)](https://www.textualize.io/)\n\nTextual-Window is an extension library for [Textual](https://github.com/Textualize/textual).\n\nIt provides a Window widget, along with an included WindowBar and WindowSwitcher, that makes it\neasy to create a desktop GUI-like experience inside of a TUI built with Textual.\n\nWindow widgets are floating, draggable, resizable, snappable, closable, and you can even cycle through them in a manner similar to alt-tab. It's like a mini desktop inside of your terminal. (Is it ridiculous? Yes, yes it is. But is it awesome? Also yes.)\n\n## Features\n\n- Drag, resize, and maximize windows. Close windows with ctrl+w.\n- Windows can focus, and highlight to show which one is focused. Controls are passed from the highlighted window to its inner scrolling container.\n- Included fully-automatic Window Bar (aka Task Bar). Don't worry about keeping track of the windows. Just compose and go. The library will track them for you.\n- Included Window Switcher, to cycle window focus in a manner similar to alt-tab. The most recently focused window is always at the start (left side).\n- Set the window's min and max size through Textual CSS as you normally would, and the window will respect those settings when resizing. Resizing can also be disabled per window.\n- Windows snap to the terminal by default, toggle this on/off in real-time.\n- WindowBar can toggle the dock between top and bottom of the screen in real-time.\n- Window Bar has right-click context menus, one for each window, as well as a global context menu with options such as close/open all or snap/unsnap all.\n- Set the window's starting location on the screen using plain descriptions (ie. right + bottom), as well as whether to initialize open or closed.\n- An optional hamburger menu for custom callbacks - The window has a 'menu_options' argument. Pass in a dictionary of functions (label + callback) and these functions will appear in that window's hamburger menu. (If nothing is passed in, the menu is not shown).\n- Smooth fade in/out animation adds a convincing touch.\n- Create windows in all 3 ways textual supports - context manager, passing in a list of children, and custom Window objects.\n- ...and many small QoL things too numerous to list here.\n\nSee the documentation for more details.\n\n## Demo App\n\nIf you have uv or Pipx, you can immediately try the demo app:\n\n```sh\nuvx textual-window \n```\n\n```sh\npipx run textual-window\n```\n\n## Documentation\n\n### [Click here for documentation](https://edward-jazzhands.github.io/libraries/textual-window/)\n\n## Video\n\nhttps://github.com/user-attachments/assets/2bf5f4d9-f289-4e7f-b9ae-e91fd34c1ce3\n\n## Questions, issues, suggestions?\n\nFeel free to post an issue.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A Textual widget for a floating, draggable window and included window bar/manager system.",
    "version": "0.5.2",
    "project_urls": {
        "Changelog": "https://github.com/edward-jazzhands/textual-window/blob/master/Changelog.md",
        "Repository": "https://github.com/edward-jazzhands/textual-window"
    },
    "split_keywords": [
        "python",
        " textual",
        " tui",
        " widget",
        " window"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "828ae6602b08cd13d9453b948251dfd9cf16dea63170eaeb46fefc37889509ca",
                "md5": "96da1328b50e71d55c684d4146b653d3",
                "sha256": "e7f0b5aa69ac809c29128c1e57e5bc62276f9dea53d8471d1a0a1229b5ab95b4"
            },
            "downloads": -1,
            "filename": "textual_window-0.5.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "96da1328b50e71d55c684d4146b653d3",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 31185,
            "upload_time": "2025-07-11T16:41:09",
            "upload_time_iso_8601": "2025-07-11T16:41:09.593752Z",
            "url": "https://files.pythonhosted.org/packages/82/8a/e6602b08cd13d9453b948251dfd9cf16dea63170eaeb46fefc37889509ca/textual_window-0.5.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0aface0ed05ed72f9d691d1c8f4475c931c1265dadacfbe5365eadc160955277",
                "md5": "d1104a25e6dd7638859207e526d6f542",
                "sha256": "9adfdab19af86a788885f060a75da20839f4a1ed20b793b7eb30cead4c1570d7"
            },
            "downloads": -1,
            "filename": "textual_window-0.5.2.tar.gz",
            "has_sig": false,
            "md5_digest": "d1104a25e6dd7638859207e526d6f542",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 97315,
            "upload_time": "2025-07-11T16:41:10",
            "upload_time_iso_8601": "2025-07-11T16:41:10.774692Z",
            "url": "https://files.pythonhosted.org/packages/0a/fa/ce0ed05ed72f9d691d1c8f4475c931c1265dadacfbe5365eadc160955277/textual_window-0.5.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-11 16:41:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "edward-jazzhands",
    "github_project": "textual-window",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "textual-window"
}
        
Elapsed time: 0.52405s