Python生态下CLI/TUI工具:Rich、Textual、alive-progress、tabulate、plotext、yaspin、Scroll Art

发布时间:2026/7/13 15:37:45
Python生态下CLI/TUI工具:Rich、Textual、alive-progress、tabulate、plotext、yaspin、Scroll Art Rich终端下的开源GitHub56.8K Star2.2K Fork富文本渲染工具官方文档。安装pip install rich示例fromrich.consoleimportConsolefromrich.tableimportColumn,Table consoleConsole()tableTable(show_headerTrue,header_stylebold magenta)table.add_column(Date,styledim,width12)table.add_column(Title)table.add_column(Production Budget,justifyright)table.add_column(Box Office,justifyright)table.add_row(Dev 20, 2019,Star Wars: The Rise of Skywalker,$275,000,000,$375,126,118)table.add_row(May 25, 2018,[red]Solo[/red]: A Star Wars Story,$275,000,000,$393,151,347,)table.add_row(Dec 15, 2017,Star Wars Ep. VIII: The Last Jedi,$262,000,000,[bold]$1,332,539,889[/bold],)console.print(table)Windows下的PowerShell展现效果Git Bash则没有字体颜色效果。Textual官网终端下的开源GitHub36.6K Star1.3K ForkReact/Vue在CLI模式下实现真正的交互式界面。内置组件Button按钮Input输入框DataTable表格支持排序、筛选Tree树形控件MarkdownViewer直接渲染MarkdownLog日志输出区域适用场景场景说明TUI工具比如数据库客户端、API测试工具系统监控面板实时显示CPU、内存、日志配置向导多步骤的交互式配置界面终端游戏用文本界面做小游戏数据浏览不想开浏览器终端里直接看表格框架用户taskipy任务管理工具TUItrogon自动把Click CLI转成交互界面django-admin增强工具部分项目在用对比库特点适合textual完整UI框架组件丰富复杂的交互式终端应用rich美化输出单次渲染打印漂亮的日志、表格plotext专门画图表快速看数据趋势prompt_toolkit构建命令行应用自动补全、语法高亮的REPL安装pip install textual注意事项终端要求需支持真彩色和鼠标事件Windows Terminal、iTerm2、GNOME Terminal都行老cmd不行学习曲线比 print() 复杂需要理解布局、事件、响应式变量这些概念不能做酷炫动画毕竟是字符界面没法做流畅的 60fps 动画入门示例fromtextual.appimportAppfromtextual.containersimportHorizontal,Verticalfromtextual.widgetsimportButton,Header,Footer,ProgressBarimportpsutilfromtextual.reactiveimportreactiveimportasyncioclassMyApp(App):defcompose(self):yieldHeader()yieldButton(点我一下,variantprimary)yieldFooter()defon_button_pressed(self,event):self.query_one(Button).label点过了MyApp().run()classLayoutApp(App):defcompose(self):withHorizontal():withVertical():yieldButton(左上)yieldButton(左下)withVertical():yieldButton(右上)yieldButton(右下)LayoutApp().run()classMonitorApp(App):defcompose(self):yieldProgressBar()asyncdefon_mount(self):whileTrue:cpupsutil.cpu_percent()self.query_one(ProgressBar).progresscpuawaitasyncio.sleep(1)MonitorApp().run()alive-progress开源GitHub6.3K Star234 Fork项目不同于普通tqdm进度条是文本动画进度百分比已用时间速度剩余时间估计等。可选进度条样式blocks、bubbles、fill、classic可选光标样式dots、classic、stars、arrows对比tqdm特性tqdmalive-progress简洁度⭐⭐⭐⭐⭐⭐⭐⭐⭐视觉效果普通炫酷自定义程度高很高知名度顶流小众依赖轻量稍重安装pip install alive-progress入门示例fromalive_progressimportalive_bar,alive_itimporttimewithalive_bar(100)asbar:foriinrange(100):time.sleep(0.03)bar()withalive_bar(100,title下载进度,barblocks,spinnerdots)asbar:foriteminalive_it(items,title遍历中):tabulate命令行里的开源GitHub2.6K Star195 Fork表格生成器。适用场景说明脚本输出结果比print好看一万倍CLI工具给用户看结构化的数据调试/临时查看快速看DataFrame或列表内容写文档/README用tablefmtpipe直接生成Markdown表格支持的表格形式包括plain纯文本适合日志simplegithub和pipe类似没有对齐冒号gridsimple_gridrounded_grid带圆角漂亮边框heavy_gridmixed_griddouble_gridfancy_gridoutlinesimple_outlinerounded_outlineheavy_outlinemixed_outlinedouble_outlinefancy_outlinepipeMarkdown适合文档orgtblasciidocjiraprestoprettypsqlrstmediawikimoinmoinyoutrackhtmlunsafehtmllatexlatex_rawlatex_booktabslatex_longtabletextiletsv安装pip install tabulate示例fromtabulateimporttabulate data[[张三,25,北京],[李四,30,上海],[王五,28,深圳]]h[姓名,年龄,城市]# tablefmt参数可指定上述36种格式print(tabulate(data,headersh,tablefmtgrid))# 数字默认右对齐文字默认左对齐手动指定print(tabulate(data,headersh,numaligncenter,stralignleft))示例图plotext在终端里画图表的开源GitHub2.2K Star90 Fork库主要目的是为科学可视化提供一个轻量高效且命令行友好的解决方案在GUI不可用或不切实际的环境中尤其有用如远程服务器、 高性能计算集群或嵌入式系统。通过将绘图渲染为ASCII或unicode字符能够对数据提供即时视觉反馈而无需复杂的显示协议或大量数据传输。特性支持多种图表类型包括折线图、散点图、柱状图、直方图、日期时间图如K线图丰富的绘图功能绘制误差线、混淆矩阵并在图表中添加额外的文本、线条和形状图像和视频支持支持在终端中绘制图像包括GIF动画和播放带有音频的视频包括YouTube视频保存图表可将图表保存为文本或彩色HTML格式无依赖性除图像和视频功能外无需额外依赖命令行工具提供专用命令行工具语法简洁其API设计类似于matplotlib易于上手实战可选依赖包包括pillow用于图像绘制opencv-python用于视频渲染ffpyplayer用于音频流pafy和youtube-dl用于YouTube流shtab用于TAB自动补全安装pipinstallplotext pipinstallplotext[image]pipinstallplotext[completion]绘制散点图正弦图示例importplotextasplt yplt.sin()plt.scatter(y,colorred,markero,labelysin(x))plt.title(Scatter Plot)plt.vline(100,magenta)plt.hline(0.5,blue)plt.plotsize(200,20)plt.show()plt.save_fig(./plot.txt)绘制柱状图示例pizzas[Sausage,Pepperoni,Mushrooms,Cheese,Chicken,Beef]percentages[14,36,11,8,7,4]plt.bar(pizzas,percentages)plt.title(Labelled Bar Plot using Text())[plt.text(pizzas[i],xi1,ypercentages[i]1.5,alignmentcenter,colorred)foriinrange(len(pizzas))]plt.ylim(0,38)plt.plotsize(100,30)plt.show()可通过构建子图的方式在同一个终端窗口中绘制多个图表。使用subplots(rows , cols)方法来构建网格再使用subplot()方法来访问指定行和列位置从子图矩阵的左上角开始计数起始索引为1的特定子图并确定在其中绘制的数据内容以及绘制方式。子图可嵌套即任何一个子图都可以创建属于它自己的子图矩阵。如要创建2×2的子图矩阵其中第一个子图本身又是一个3×4的子图矩阵可使用subplots(2, 2); subplot(1, 1); subplots(3, 4)或直接写成subplots(2, 2).subplot(1, 1).subplots(3, 4)。importnumpyasnp xnp.linspace(0,10,100)y1np.sin(x)y2np.cos(x)plt.subplots(2,1)plt.subplot(1,1)plt.plot(x,y1)plt.title(Sine Wave)plt.subplot(2,1)plt.plot(x,y2)plt.title(Cosine Wave)plt.show()使用image_plot(path)绘制图像play_gif(path)渲染GIF图像。注意事项在调用image_plot()前使用plotsize()方法尤其是对于较大的图像以便预先减小图像大小减轻计算负担如果希望绘制速度更快可设置fastTrue绘图尺寸将锁定为之前选择的大小不会适应终端或子图的大小后续的任何设置方法如xlabel()、frame()等都不会生效如果要绘制超出终端大小的图像请使用plt.limit_size()函数或使用其他库如tkinterpath./1.jpgplt.plotsize(64,64)plt.image_plot(path,markerlist(codedesigner),styleinverted,# grayscaleTrue # 灰度模式)plt.title(设计师)plt.show()plt.save_fig(./plot.html)yaspinYet Another Terminal Spinner for Python简写终端里的开源GitHub912 Star44 Fork动画加载播放器。内置动画dots、line、moon、arrow、bouncingBar、pong、earth地球转。库特点适合场景tqdm进度条有百分比知道总量、要显示进度yaspin转圈动画不知道总量只知道正在做不知道做多久rich.progress功能强大但重复杂的进度显示halo类似yaspin替代品安装pip install yaspin示例fromyaspinimportyaspinfromyaspin.spinnersimportSpinnersimporttimewithyaspin(text正在加载...,colorcyan):time.sleep(1)# 省略sleepwithyaspin(Spinners.dots,text处理中):withyaspin(Spinners.moon,text加载中):withyaspin(Spinners.arrow,text请稍候):custom{frames:[⣾,⣽,⣻,⢿,⡿,⣟,⣯,⣷],interval:80# 毫秒}withyaspin(custom,text自定义动画):time.sleep(1)withyaspin().white.bold.shark.on_blueassp:sp.textWhite bold shark in a blue seatime.sleep(2)yaspin(textLoading...)defsome_operations():time.sleep(3)some_operations()spinneryaspin(text启动中...)spinner.start()spinner.text加载配置...spinner.ok(✅完成)Scroll Art终端打印输出ASCII动画PyPi。支持调参数如改速度、改宽度starfield星际穿越那种星空星星密度还会变化ducklings一群小鸭子在屏幕上乱跑萌到爆炸matrix经典的数字雨瞬间觉得自己是尼奥dna双螺旋结构旋转程序员也能玩生物pac_wall吃豆人风格的墙体动画snail_trail蜗牛爬过留下的黏液痕迹安装pip install scrollart命令行示例python-mscrollart ducklings python-mscrollart matrix效果图