自定义布局
前言¶
在 Gradio 开发中,提前固定好布局可以帮助开发者更好地组织界面,提高开发效率,并确保最终应用的视觉效果。
以下是几种常用的布局方式。
- 使用
gradio.Interface构建基础布局 - 使用
gradio.Blocks构建更复杂的布局 - 使用样式表自定义布局
布局选择
对于开发者来说,方法 1 往往不能满足日常使用场景,因为这种方法过于简单,不如方法 2 灵活,同时方法 3 又过于复杂,最适合大众开发者的就是方法 2,该方法灵活易用,可构建复杂布局,如果需要构建更复杂的布局,可以将方法 2 和方法 3 结合。
Row(行布局)¶
默认情况下,Blocks 中的组件是垂直排列的。让我们开始用 Rows 重新排列组件。
当开发者希望多个组件并排排列,只需在 with gradio.Row() 下文中创建组件(各种组件将在后续一一说明)即可 (1) 。
- 代码解读
with gr.Blocks() as demo::创建了一个 Gradio 应用程序,并将其赋值给demo。with gr.Row()::创建了一个水平排列的容器,所有在这个容器中创建的元素都会被水平排列。img = gr.Image():创建了一个图片组件,并将其赋值给img。audio = gr.Audio():创建了另一个图片组件,并将其赋值给audio。demo.launch():启动 Gradio 应用程序。
| Python | |
|---|---|
下面是 gradio.Row 参数对照表:
| 参数名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
variant | Literal[('default', 'panel', 'compact')] | "default" | 行类型,'default' (无背景),'panel' (灰色背景和圆角),或者 'compact' (圆角和无内部间距)。 |
visible | bool | True | 如果为 False,则该行将被隐藏。 |
equal_height | bool | True | 如果为 True,则所有子元素的高度一致。 |
show_progress | bool | False | 如果为 True,则在更新时显示进度动画。 |
elem_id | str | None | 可选的字符串,作为该组件在 HTML DOM 中的 id。可用于定位 CSS 样式。 |
elem_classes | list[str] | None | 可选的字符串或字符串列表,作为该组件在 HTML DOM 中的类。可用于定位 CSS 样式。 |
下面是一些参数变化对照图:
| visible | |
|---|---|
| equal_height | |
|---|---|
Column(列布局)¶
与 Row 类似,Column 用于垂直排列组件。
当开发者希望多个组件上下排列,只需在 with gradio.Column () 下文中创建组件即可。
| Python | |
|---|---|
下面是 gradio.Column 参数对照表:
| 参数名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
scale | int | 1 | 相对于相邻列的相对宽度。例如,如果列 A 的 scale 为 2,而列 B 的 scale 为 1,则 A 的宽度将是 B 的两倍。 |
min_width | int | 320 | 列的最小像素宽度,如果屏幕空间不足以满足此值,则会换行。如果某个 scale 值导致列宽度小于 min_width,则会优先考虑 min_width 参数。 |
variant | Literal[('default', 'panel', 'compact')] | "default" | 列类型,'default' (无背景),'panel' (灰色背景和圆角),或者 'compact' (圆角和无内部间距)。 |
visible | bool | True | 如果为 False,则该列将被隐藏。 |
show_progress | bool | False | 如果为 True,则在更新时显示进度动画。 |
render | bool | True | 如果为 False,则该组件不会在 Blocks 上下文中渲染。如果需要现在分配事件监听器,但稍后渲染组件,则应使用此参数。 |
elem_id | str | None | 可选的字符串,作为该组件在 HTML DOM 中的 id。可用于定位 CSS 样式。 |
elem_classes | list[str] | None | 可选的字符串或字符串列表,作为该组件在 HTML DOM 中的类。可用于定位 CSS 样式。 |
Nesting(镶嵌布局)¶
在 Gradio 中,Column 布局默认情况下会将内部组件垂直排列,而这恰好是 Blocks 应用程序的默认布局方式。因此,为了使 Column 组件发挥作用,通常需要将其嵌套在 Row 组件中,以实现水平排列。
假设要创建下面示例的布局,或是更复杂的布局都可以使用 Row 与 Column 的嵌套来实现。
| Python | |
|---|---|
参考资料¶
-
Gradio文档(布局部分)
-
flexbox 的基本概念






