布局¶
Rich提供了一种 Layout
类,该类可用于将屏幕区域划分为多个部分,其中每个部分可以包含独立的内容。它可以与 现场展示 创建全屏“应用程序”,但可以单独使用。
要查看布局示例,请从命令行运行以下命令:
python -m rich.layout
创建布局¶
要定义布局,请构造一个布局对象并打印它:
from rich import print
from rich.layout import Layout
layout = Layout()
print(layout)
这将绘制一个端子大小的框,其中包含一些有关布局的信息。该框是一个“占位符”,因为我们还没有向其中添加任何内容。在此之前,让我们通过调用 split_column()
方法将布局分为两个子布局::
layout.split_column(
Layout(name="upper"),
Layout(name="lower")
)
print(layout)
这将把终端屏幕分成两个大小相等的部分,一个在另一个的上面。这个 name
属性是我们稍后可以用来查询子布局的内部标识符。让我们使用它来创建另一个拆分,这次我们将调用 split_row()
要将下部布局拆分为一行两个子布局,请执行以下操作:
layout["lower"].split_row(
Layout(name="left"),
Layout(name="right"),
)
print(layout)
现在您应该看到屏幕区域被分成3部分;上半部分和下半部分被分成两个季度。
╭─────────────────────────────── 'upper' (84 x 13) ────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ {'size': None, 'minimum_size': 1, 'ratio': 1, 'name': 'upper'} │ │ │ │ │ │ │ │ │ │ │ ╰──────────────────────────────────────────────────────────────────────────────────╯ ╭─────────── 'left' (42 x 14) ───────────╮╭────────── 'right' (42 x 14) ───────────╮ │ ││ │ │ ││ │ │ ││ │ │ { ││ { │ │ 'size': None, ││ 'size': None, │ │ 'minimum_size': 1, ││ 'minimum_size': 1, │ │ 'ratio': 1, ││ 'ratio': 1, │ │ 'name': 'left' ││ 'name': 'right' │ │ } ││ } │ │ ││ │ │ ││ │ │ ││ │ ╰────────────────────────────────────────╯╰────────────────────────────────────────╯
您可以继续以这种方式调用Split(),以便在屏幕上创建任意多个部分。
设置可渲染对象¶
的第一个位置参数 Layout
可以是任何丰富的可渲染对象,其大小将调整为适合布局的区域。下面是如何将“正确”布局划分为两个面板的方法:
from rich.panel import Panel
layout["right"].split(
Layout(Panel("Hello")),
Layout(Panel("World!"))
)
您也可以拨打 update()
要设置或替换当前可渲染对象,请执行以下操作:
layout["left"].update(
"The mystery of life isn't a problem to solve, but a reality to experience."
)
print(layout)
固定大小¶
属性可以将布局设置为使用固定大小 size
参数,或通过设置该属性。以下是一个示例:
layout["upper"].size = 10
print(layout)
无论终端的大小如何,这都会将上半部分设置为正好10行。如果父布局是水平布局而不是垂直布局,则大小适用于字符数而不是行。
比率¶
除了固定大小外,还可以灵活地设置 ratio
参数,或通过向属性赋值来实现。该比率定义了该布局相对于其他布局应该占据多少屏幕。例如,让我们重置大小并将上方布局的比例设置为2::
layout["upper"].size = None
layout["upper"].ratio = 2
print(layout)
这使得顶部布局占据了三分之二的空间。这是因为默认比例为1,使上布局和下布局的总和为3。由于上布局的比例为2,因此它占用三分之二的空间,剩下的三分之一用于下布局。
设置了比率的版面也可能有最小尺寸,以防止其变得太小。例如,下面是我们如何设置较低的子布局的最小大小,使其不会缩小到10行以上:
layout["lower"].minimum_size = 10
可见性¶
属性可以使布局不可见 visible
属性设置为False。以下是一个示例:
layout["upper"].visible = False
print(layout)
顶部布局现在不可见,而“下部”布局将扩展以填充可用空间。集 visible
设置为True将其带回::
layout["upper"].visible = True
print(layout)
您可以使用它来根据应用程序的配置切换界面的某些部分。
树¶
为了帮助可视化复杂的布局,您可以打印 tree
将以树形式显示布局摘要的属性::
print(layout.tree)
示例¶
看见 fullscreen.py 举个例子,它结合了 Layout
和 Live
创建一个全屏“应用程序”。