那天我在公司茶水间跟同事聊天,说我最近在写个小工具,用 Python 做点交互界面。他一听还以为我要搞 Tkinter 或 PyQt,结果我说:“不是窗口的,是那种在命令行里直接跑的,有点像 htop 那种终端 GUI。” 他当场愣住,说:“这玩意还能整出界面?”
我就给他演示了下,用的库叫 Textual。这玩意用纯 Python 写的,底层基于 Rich,也就是那个可以让终端打印彩色日志、进度条的库。Textual 则更进一步,能在终端里做出类似网页的交互界面,比如按钮、输入框、表格、弹窗那种。真的挺“酷”的。为什么要用“终端 GUI”?其实我一开始也是抱着试试的心态。你知道吧,有时候写运维工具、监控脚本,做个命令行菜单选项特别麻烦,还得输各种命令参数。用 Textual 这种框架,就能搞出一个小面板,比如这样:
这段代码跑起来之后,你在终端能看到一个带标题栏的界面,下面一个输入框、一个按钮、一个输出区。按下按钮,终端直接刷新出“你好呀,小王”这样的文字。全程无刷新,无 flicker,甚至还能响应键盘事件。那感觉就像用 Python 写了个“小系统 UI”。
Textual 的设计有点像前端框架
有趣的是,Textual 跟 Web 前端的思想还挺像。它里面的控件叫 Widget,布局用 Container 管理,还支持自己的 CSS 文件。对,就是那种写 #button { width: 50%; } 的 CSS。 我当时第一次看文档的时候真笑出声了:“好家伙,这不是前端写多了的产物嘛。”不过好处也明显——逻辑和样式分离得特别干净,比如你改字体颜色、改对齐方式,全都不用动 Python 代码,只要在 CSS 里写:
然后运行时自动生效,终端里的按钮立刻变颜色。它底层用的 RichRender,所以性能和刷新效率都挺高。
一些实用的玩法
我后来拿 Textual 写了几个小工具,体验还挺不错的。 比如一个是日志监控面板,会实时显示日志流,还能用键盘上下翻页:
这种东西以前我都是直接用 tail -f 或 less 看,现在能直接在界面里滚动、搜索、着色,还能加个暂停按钮,体验完全不一样。
还有一次,我做了个 Redis 管理的小面板。终端里能选数据库、查看键、执行命令,整个感觉就像早期 DOS 下的那种“系统管理工具”。同事看我演示的时候直呼“这比 CLI 花哨多了”。
对比一下别的框架
其实 Python 的终端 UI 框架挺多的,比如:curses:老牌库,但写起来真心痛苦;urwid:稍微现代点,但不太活跃;prompt_toolkit:交互体验好,但布局太自由,做完整 UI 有点吃力。而 Textual 把这些都融合了,既能写结构化界面,又能异步响应事件。用起来更接近写个“小前端”。比如它有个 on_key 方法可以监听键盘事件,这让我做键盘控制菜单的时候特别舒服。
你要问我 Textual 有没有什么坑?也有。比如复杂布局的性能在 Windows Terminal 里会略慢一点,而且有时候刷新会闪;另外多线程操作要用它内置的 call_later 或异步任务,不然容易卡 UI。但总体上,它真的让“命令行程序”不再只是黑白字。 我平时在服务器上跑脚本时,就能直接打开这种小界面去选项、看日志,甚至输入命令,感觉比做个 Flask 网页轻量多了。有时候我就在想——要是二十年前就有这玩意,Linux 下那些 ncurses 工具估计都能退休了。你要是 Python 程序员,真可以花十分钟试试。 一句话总结:Textual 让终端不再“土”,让 CLI 也能有点 UI 的浪漫。
以上就是“Python 文本终端 GUI 框架,太酷了!”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。
扫码二维码 获取免费视频学习资料

- 本文固定链接: http://www.phpxs.com/post/13656/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料