ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Textual:用 Python 在终端与浏览器中构建现代用户界面的轻量级应用框架

Textual:用 Python 在终端与浏览器中构建现代用户界面的轻量级应用框架 Textual用 Python 在终端与浏览器中构建现代用户界面的轻量级应用框架【免费下载链接】textualThe lean application framework for Python. Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.项目地址: https://gitcode.com/gh_mirrors/te/textualTextual 是一个面向 Python 的快速应用开发Rapid Application Development框架让你用一套简洁的 Python API 构建精致、可交互的用户界面并能在终端或浏览器中运行同一套应用。本文以项目官方文档首页为核心系统讲解 Textual 的定位、核心特性、安装方式、示例应用与生态并结合仓库内真实源码深入剖析其开发范式帮助读者快速上手并理解其底层机制。什么是 TextualTextual 由 Textualize.io 团队开发是一个用于 Python 的快速应用开发框架。它的核心主张是用简单的 Python API 构建复杂的用户界面应用既可以在终端运行也可以通过textual serve等工具在浏览器中运行。仓库 pyproject.toml 中将其描述为 Modern Text User Interface framework现代文本用户界面框架当前版本为 8.2.8采用 MIT 许可文档首页特性卡片中也明确标注 Textual is licensed under MIT。该框架以 Python 3.9 及以上版本为目标pyproject.toml中python ^3.9支持 Linux、macOS、Windows以及几乎所有 Python 能够运行的平台。从文档首页的定位来看Textual 面向的不仅是开发者——它把 Web 世界中成熟的组件化、响应式、CSS 样式等理念引入终端编程同时保持 Python 开发者熟悉的编码习惯。六大核心特性文档首页以特性卡片的形式总结了 Textual 的核心能力下面逐一展开并结合仓库验证特性说明快速开发Rapid development直接复用你已有的 Python 技能即可构建精美的用户界面无需学习终端绘图细节低要求Low requirements对硬件要求极低甚至可以在树莓派这类单板计算机上运行跨平台Cross platform支持 Linux、macOS、Windows几乎在所有 Python 可运行的环境中都能工作远程运行RemoteTextual 应用可以通过 SSH 远程运行天然适合服务器场景CLI 集成CLI Integration应用可以直接从命令行提示符启动并运行与现有工具链无缝衔接开源Open Source基于 MIT 协议开源可自由使用、修改与分发其中快速开发与跨平台两大特性正是 Textual 框架设计的出发点它把富文本渲染底层基于 Rich与异步事件循环、响应式状态管理整合在一起让开发者把精力集中在业务逻辑上。技术底座异步 响应式 组件化虽然入门时可以完全不接触异步编程README 明确说明 Textual wont force it on you但理解底层机制有助于写出更高质量的界面异步框架内核Textual 本质是一个异步框架这意味着你可以将应用与任何 async 库集成处理网络请求、定时任务等并发场景。响应式状态通过 响应式属性reactive.var声明应用状态状态变化自动触发界面刷新。下面的计算器示例会详细演示watch_*与compute_*的用法。组件化部件体系Textual 提供了从按钮、树控件、数据表格、输入框到文本编辑器在内的丰富部件库配合灵活的布局系统可以组合出任意需要的界面且内置主题保证开箱即用的视觉效果。环境要求与安装根据 入门指南Textual 要求Python 3.9 或更高版本有条件请优先选择最新 Python。平台方面Linux 各发行版自带终端即可运行macOS 默认终端仅支持 256 色官方建议使用 iTerm2、Ghostty、Kitty 或 WezTerm 等现代终端Windows 则推荐使用 Windows Terminal运行效果最佳。如果你使用的是 Linux 控制台非桌面环境请参考 Linux 控制台说明。从 PyPI 安装pip install textual如果你计划开发 Textual 应用还应同时安装开发者工具包pip install textual-dev若需要在 TextArea 部件中启用语法高亮安装时请指定syntax附加依赖pip install textual[syntax]该 extras 在 pyproject.toml 中有完整定义它通过 tree-sitter 系列包要求 Python 3.10为 Python、Markdown、JSON、TOML、YAML、HTML、CSS、JavaScript、Rust、Go、SQL、Java、Bash 等语言提供语法解析能力。从 conda-forge 安装Textual 也发布在 conda-forge 上官方推荐使用 micromambamicromamba install -c conda-forge textual micromamba install -c conda-forge textual-devTextual CLI安装开发者工具后你将获得textual命令其中包含一系列辅助构建应用的子命令。运行以下命令查看可用命令列表textual --help更多关于textual命令的用法参见开发工具指南。快速体验运行官方 Demo安装完成后一条命令即可感受 Textual 的能力python -m textual这条命令的入口在 src/textual/main.py它实例化DemoApp并调用app.run()启动应用退出后还会在终端打印一条致谢提示面板。Demo 应用本身位于 src/textual/demo/ 目录包含多个展示部件与动画效果的子应用。如果不安装也想体验可以在装有 uv 的环境下运行uvx --python 3.12 textual-demo把应用搬到浏览器Textual 应用在浏览器与终端中同样出色。任何 Textual 应用都可以用textual serve托管到 Web 端方便分享textual serve python -m textual本地托管之外还可以借助 Textual Web 的公网穿透能力突破防火墙限制托管任意数量的应用。由于 Textual 系统要求低你可以把它安装在任何 Python 可运行的地方将任意设备变成联网设备——不需要桌面环境。开发与调试工具在终端里调试一个同样运行在终端里的应用是个经典难题textual-dev包提供了解决方案开发者控制台dev console可以从另一个终端连接到你的应用除了系统消息和事件你通过log输出的日志以及print语句都会出现在控制台里。此外Textual 应用内置了模糊搜索命令面板command palette按ctrlp即可打开并且可以很容易地通过自定义命令进行扩展。用 Textual 构建的生态应用文档首页专门设置了 Built with Textual 板块展示了一批基于 Textual 构建的真实应用印证了框架在多种场景下的实战能力Toad面向 OpenHands、Claude Code、Gemini CLI 等 AI 编码工具的终端前端。Posting生活在终端里的 API 客户端用于开发与测试 API。Toolong用于查看、tail、合并与搜索日志文件含 JSONL的终端应用由 Textualize 团队自己开发。MemrayBloomberg 开发的 Python 内存分析器。Dolphie面向 MySQL/MariaDB 与 ProxySQL 的实时分析单一玻璃面板。Harlequin易用、快速且美观的终端数据库客户端。这些应用的官方屏幕截图保存在 docs/images/screenshots/ 目录中Posting 应用界面截图终端内的 API 开发测试客户端动手实践官方示例应用拆解文档首页的 Examples 板块以标签页形式内嵌了两个官方示例的完整源码取自 examples 目录这两个例子恰好覆盖了 Textual 开发的两个典型维度极简启动与完整实战。Pride 示例最短可运行的 Textual 应用examples/pride.py 是演示 Textual 入门概念的经典例子完整代码如下from textual.app import App, ComposeResult from textual.widgets import Static class PrideApp(App): Displays a pride flag. COLORS [red, orange, yellow, green, blue, purple] def compose(self) - ComposeResult: for color in self.COLORS: stripe Static() stripe.styles.height 1fr stripe.styles.background color yield stripe if __name__ __main__: PrideApp().run()这个不足 20 行的应用集中体现了 Textual 的三个核心概念App子类应用主体是一个继承自textual.app.App的类if __name__ __main__中调用run()启动事件循环。compose方法以生成器方式声明界面结构yield一个部件即挂载一个部件。这里通过循环生成 6 个彩条。程序化样式stripe.styles.height 1fr与stripe.styles.background color演示了在代码中直接设置布局比例1fr表示均分垂直空间与背景色这等价于 CSS 中的对应声明。运行方式很简单cd examples python pride.pyCalculator 示例响应式状态与 CSS 样式的完整实战examples/calculator.py 是一个受 macOS 计算器启发、功能完整的桌面级计算器支持鼠标点击按钮与键盘按键两种操作方式。它同时展示了 Textual 开发中最重要的三个进阶特性值得逐行研读。1. 响应式状态声明varnumbers var(0) show_ac var(True) left var(Decimal(0)) right var(Decimal(0)) value var() operator var(plus)通过from textual.reactive import var声明的类属性即响应式状态。任何对它们的赋值都会自动触发对应watch_*方法状态变化时调用或compute_*方法重新计算衍生值def watch_numbers(self, value: str) - None: Called when numbers is updated. self.query_one(#numbers, Digits).update(value) def compute_show_ac(self) - bool: Compute switch to show AC or C button return self.value in (, 0) and self.numbers 0 def watch_show_ac(self, show_ac: bool) - None: Called when show_ac changes. self.query_one(#c).display not show_ac self.query_one(#ac).display show_ac这里numbers一更新Digits部件便自动刷新显示show_ac则根据计算状态在 AC清零与 C仅清除当前输入两个按钮间自动切换。关于响应式机制的完整说明见响应式指南。2. 事件分发与on装饰器按键事件通过on_key方法监听并映射到对应按钮 ID按钮点击则用on(Button.Pressed, ...)选择器式监听支持按 ID 或 CSS 类精准路由on(Button.Pressed, .number) def number_pressed(self, event: Button.Pressed) - None: Pressed a number. assert event.button.id is not None number event.button.id.partition(-)[-1] self.numbers self.value self.value.lstrip(0) number on(Button.Pressed, #plus,#minus,#divide,#multiply) def pressed_op(self, event: Button.Pressed) - None: Pressed one of the arithmetic operations. self.right Decimal(self.value or 0) self._do_math() assert event.button.id is not None self.operator event.button.id.number匹配所有带number类的按钮数字键 0-9#plus,#minus,#divide,#multiply匹配多个指定 ID 的运算符按钮。event.button.id.partition(-)[-1]从number-7这类 ID 中提取数字本身。整个计算逻辑用Decimal保证精度异常时显示 Error。3. CSS 文件与网格布局应用通过CSS_PATH calculator.tcss引入外部样式表 examples/calculator.tcss。该样式表用 Textual 的类 CSS 语法完成了计算器的全部排版#calculator { layout: grid; grid-size: 4; grid-gutter: 1 2; grid-columns: 1fr; grid-rows: 2fr 1fr 1fr 1fr 1fr 1fr; margin: 1 2; min-height: 25; min-width: 26; height: 100%; :inline { margin: 0 2; } } Button { width: 100%; height: 100%; } #numbers { column-span: 4; padding: 0 1; height: 100%; background: $panel; color: $text; content-align: center middle; text-align: right; } #number-0 { column-span: 2; }要点解读layout: grid声明 4 列网格grid-rows: 2fr 1fr ...让显示区占两倍高度其余行等分#numbers { column-span: 4; }让显示区横跨整行background: $panel、color: $text引用的是 Textual 主题变量自动适配当前主题#number-0 { column-span: 2; }让 0 键横跨两列模拟真实键盘布局:inline { margin: 0 2; }是父选择器在inline模式下的样式覆盖——因为该应用在__main__中以CalculatorApp().run(inlineTrue)启动inline模式专为嵌入式/内联运行场景调整边距。计算器示例同时放在 docs/examples/ 对应的指南文档中使用文档中所有部件截图的生成代码也都可以在 docs/examples 目录找到。探索更多从零开始入门指南 提供了全部环境准备细节教程 则循序渐进地构建一个完整应用。深入主题指南 目录覆盖 CSS、事件、布局、屏幕、测试、工作线程workers等全部主题部件文档 逐个讲解内置部件的用法。学习范例仓库 examples/ 中还有计算器、时钟、代码浏览器、JSON 树、字典应用等更多可直接运行的例子例如python code_browser.py ../。测试与维护Textual 内置了先进的测试框架配合解耦的组件设计确保应用可以长期维护。遇到问题参阅帮助页面 获取社区帮助或报告 Bug。【免费下载链接】textualThe lean application framework for Python. Build sophisticated user interfaces with a simple Python API. Run your apps in the terminal and a web browser.项目地址: https://gitcode.com/gh_mirrors/te/textual创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表