布局¶
Rich 提供了一个 Layout
类,可用于将屏幕区域划分为多个部分,每个部分可以包含独立的内容。它可以与 实时显示 一起使用来创建全屏“应用程序”,但也可以独立使用。
要查看布局的示例,请从命令行运行以下命令
python -m rich.layout
创建布局¶
要定义布局,请构造一个 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
的第一个位置参数可以是任何 Rich 渲染器,它将被调整大小以适合布局区域。以下是如何将“右侧”布局划分为两个面板
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)
固定大小¶
您可以通过在 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
相结合以创建全屏“应用程序”的示例。