构建丰富的终端仪表板

2021-02-17 18:18:56

Rich已成为美化CLI的流行方式(在GH上为2万颗星),我很高兴看到许多项目正在使用它。

由于Rich现在已经成熟并经过了考验,因此我考虑了逐步发展。直到我看到此推文:

您是否想使用@willmcgugan的丰富库来做一些非常酷的事情?检出ghtop https://t.co/mn7oLbpw8e。它是一个非常有趣的CLI工具,可演示丰富功能(及其他功能)的强大功能。 🧵👇(1/8)以下的例子

-哈梅尔·侯赛因(@HamelHusain)2021年2月5日

@HamelHusain和@jeremyphoward使用Rich来增强ghtop(Github首席执行官拥有的一个仓库)。 Ghtop实时显示来自Github平台的事件流。而且看起来不错!太好了,以至于我意识到Rich对于此类类似htop的应用程序有多少潜力。

哈默尔(Hamel)和杰里米(Jeremy)必须克服一些技术障碍才能完成这项工作。幸运的是,由于最新版本的Rich通过新的Layout系统对全屏界面提供了一流的支持,因此不再需要此功能。

创建灵活布局的API非常简单。您构造一个Layout()对象,然后调用split()创建子布局。然后可以进一步划分这些子布局。布局具有少量设置,这些设置定义了相对于终端窗口的大小。它是一个简单的系统,可以创建几乎类似于现代Web应用程序的终端界面。

这是创建带有页眉,页脚和两个侧面板的基本布局的方法。

从rich.console导入控制台从rich.layout导入Layoutconsole = Console()layout = Layout()#划分"屏幕"分为三部分layout.split(Layout(name =" header&#34 ;, size = 3),Layout(ratio = 1,name =" main"),Layout(size = 10,name =" footer"),)#划分" main"布局到" side"和" body" layout [" main"]。split(Layout(name =" side"),Layout(name =" body&#34 ;,比= 2),方向="水平#)将"边"布局到twolayout [&side]#34.split(Layout(),Layout())console.print(layout)

现在,我们可以使用Live类来创建一个适合终端窗口的应用程序:

在真实的应用程序中,什么都不做的循环将做一些有用的事情,例如从网络中提取数据以更新内容。

我认为很明显,Rich正在获得更多的TUI(文本用户界面)功能,因此我决定不与之抗争。 Rich的核心目的仍然是美化CLI输出,但是我认为这里提供了一种新的方式来创建终端应用程序。最终,它将不再像诅咒,而更像是浏览器中的HTML。

在Rich可以替换完整的TUI库(一个键盘和鼠标输入)之前,有很多事情要做,但是潜力仍然存在。敬请期待进步。