⚡

Textual脚手架生成器Skill textual-scaffolder

Textual脚手架生成器是一个用于快速构建Python终端用户界面(TUI)的工具。它通过生成项目结构、自定义小部件、屏幕和CSS样式,帮助开发者高效创建交互式命令行应用。适用于开发仪表盘、监控工具、表单应用等。关键词:Python TUI,Textual框架,终端界面开发,CLI应用,异步编程,CSS样式,组件化开发。

后端开发 0 次安装 14 次浏览 更新于 2/23/2026
名称 textual-scaffolder
描述 使用小部件、屏幕和CSS样式生成Textual(Python)TUI应用程序结构。 allowed-tools: Read, Write, Edit, Bash, Glob, Grep

Textual 脚手架生成器

使用Python和现代异步模式生成Textual TUI(终端用户界面)应用程序。

能力

  • 生成Textual项目结构
  • 创建自定义小部件和屏幕
  • 设置基于CSS的样式
  • 实现响应式属性
  • 创建组件组合
  • 使用textual.testing设置测试

使用场景

在以下情况下调用此技能:

  • 使用Python构建终端用户界面
  • 创建具有CSS样式的交互式命令行界面
  • 实现多屏幕TUI应用程序
  • 设置Textual项目结构

输入参数

参数 类型 是否必需 描述
projectName 字符串 是 项目名称
screens 数组 否 屏幕定义
widgets 数组 否 自定义小部件定义

生成模式

主应用程序

from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, Static, Button, Input
from textual.containers import Container, Horizontal, Vertical
from textual.screen import Screen

class MainScreen(Screen):
    """主应用程序屏幕。"""

    CSS = """
    MainScreen {
        layout: grid;
        grid-size: 2;
        grid-gutter: 1;
    }

    #sidebar {
        width: 30;
        background: $surface;
        border: solid $primary;
    }

    #content {
        background: $surface;
        border: solid $secondary;
    }
    """

    def compose(self) -> ComposeResult:
        yield Header()
        yield Container(
            Static("侧边栏", id="sidebar"),
            Static("内容", id="content"),
        )
        yield Footer()


class MyApp(App):
    """主TUI应用程序。"""

    BINDINGS = [
        ("q", "quit", "退出"),
        ("d", "toggle_dark", "切换深色模式"),
    ]

    CSS_PATH = "styles.tcss"

    def on_mount(self) -> None:
        self.push_screen(MainScreen())

    def action_toggle_dark(self) -> None:
        self.dark = not self.dark


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

自定义小部件

from textual.widget import Widget
from textual.reactive import reactive
from textual.message import Message

class Counter(Widget):
    """一个带有递增/递减功能的计数器小部件。"""

    value = reactive(0)

    class Changed(Message):
        """计数器值已更改。"""
        def __init__(self, value: int) -> None:
            self.value = value
            super().__init__()

    def render(self) -> str:
        return f"计数: {self.value}"

    def increment(self) -> None:
        self.value += 1
        self.post_message(self.Changed(self.value))

    def decrement(self) -> None:
        self.value -= 1
        self.post_message(self.Changed(self.value))

CSS样式 (styles.tcss)

Screen {
    background: $surface;
}

Header {
    dock: top;
    background: $primary;
}

Footer {
    dock: bottom;
    background: $primary;
}

Button {
    margin: 1;
}

Button:hover {
    background: $primary-lighten-1;
}

Input {
    margin: 1;
    border: tall $secondary;
}

Input:focus {
    border: tall $primary;
}

.error {
    color: $error;
}

.success {
    color: $success;
}

数据表格小部件

from textual.widgets import DataTable
from textual.app import ComposeResult

class DataScreen(Screen):
    def compose(self) -> ComposeResult:
        yield DataTable()

    def on_mount(self) -> None:
        table = self.query_one(DataTable)
        table.add_columns("姓名", "邮箱", "角色")
        table.add_rows([
            ("爱丽丝", "alice@example.com", "管理员"),
            ("鲍勃", "bob@example.com", "用户"),
            ("查理", "charlie@example.com", "用户"),
        ])

依赖项

[project]
dependencies = [
    "textual>=0.40.0",
]

[project.optional-dependencies]
dev = [
    "textual-dev>=1.0.0",
]

目标流程

  • tui-application-framework
  • interactive-form-implementation
  • dashboard-monitoring-tui