博主原文链接:https://www.yourmetaverse.cn/nlp/375/
gradio库中的Dropdown模块:创建交互式下拉菜单
在构建交互式用户界面时,选择合适的输入组件对于提供良好的用户体验非常重要。gradio库中的Dropdown模块提供了创建下拉菜单的功能,使用户可以从多个选项中进行选择。本文将介绍gradio库中的Dropdown模块以及其常用的四个方法:change、input、blur和select。
Dropdown模块介绍
Dropdown模块是gradio库中的一个组件,用于创建下拉菜单。通过提供一个选项列表,用户可以从中选择一个选项作为输入。下拉菜单的选项可以是字符串,也可以是索引。
在交互过程中,当用户选择下拉菜单的选项时,组件会将所选选项的值作为字符串或索引传递给函数进行处理。同时,函数需要返回与所选选项对应的字符串作为输出。
Dropdown模块还提供了一些参数用于定制化组件的外观和行为,如默认选项、是否允许多选、最大选项数等。
change方法
change方法是Dropdown模块的一个监听器方法,当组件的值发生变化时触发。这个变化可以是用户输入导致的(例如用户在文本框中输入内容),也可以是函数更新导致的(例如图像从事件触发的输出中接收到一个值)。change方法通常用于在Gradio Blocks中使用。
input方法
input方法是Dropdown模块的另一个监听器方法,当用户改变组件的值时触发。这个方法主要用于在Gradio Blocks中使用。
blur方法
blur方法是Dropdown模块的一个监听器方法,当组件失去焦点时(例如用户在文本框外单击)触发。这个方法也可以在Gradio Blocks中使用。
select方法
select方法是Dropdown模块的一个事件监听器,当用户选择下拉菜单的选项时触发。该方法使用gradio.SelectData事件数据传递选项的标签值和索引。
示例
以下是使用Dropdown模块创建交互界面的示例代码:
import gradio as gr
def sentence_builder(quantity, animal, countries, place, activity_list, morning):
return f"""The {quantity} {animal}s from {" and ".join(countries)} went to the {place} where they {" and ".join(activity_list)} until the {"morning" if morning else "night"}"""
demo = gr.Interface(
sentence_builder,
[
gr.Slider(2, 20, value=4, label="Count", info="Choose between 2 and 20"),
gr.Dropdown(
["cat", "dog", "bird"], label="Animal", info="Will add more animals later!"
),
gr.CheckboxGroup(["USA", "Japan", "Pakistan"], label="Countries", info="Where are they from?"),
gr.Radio(["park", "zoo", "road"], label="Location", info="Where did they go?"),
gr.Dropdown(
["ran", "swam", "ate", "slept"], value=["swam", "slept"], multiselect=True, label="Activity", info="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed auctor, nisl eget ultricies aliquam, nunc nisl aliquet nunc, eget aliquam nisl nunc vel nisl."
),
gr.Checkbox(label="Morning", info="Did they do it in the morning?"),
],
"text",
examples=[
[2, "cat", ["Japan", "Pakistan"], "park", ["ate", "swam"], True],
[4, "dog", ["Japan"], "zoo", ["ate", "swam"], False],
[10, "bird", ["USA", "Pakistan"], "road", ["ran"], False],
[8, "cat", ["Pakistan"], "zoo", ["ate"], True],
]
)
if __name__ == "__main__":
demo.launch()
参数详解
Dropdown模块参数介绍
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
choices | list[str] | None | None | 可选择的选项列表。 |
value | str | list[str] | Callable | None | None | 默认选中的值。如果为None,则没有默认选中值。如果为可调用对象,则在应用程序加载时调用该函数以设置组件的初始值。 |
type | str | “value” | 组件返回的值的类型。"value"返回选择的字符串,"index"返回选择的索引。 |
multiselect | bool | None | None | 如果为True,则可以选择多个选项。 |
max_choices | int | None | None | 可选择的最大选项数。如果为None,则不限制数量。 |
label | str | None | None | 接口中的组件名称。 |
info | str | None | None | 其他组件描述。 |
every | float | None | None | 如果’value’是可调用对象,则在客户端连接打开时每隔一段时间运行一次该函数。仅当启用队列时才有效。 |
show_label | bool | True | 如果为True,则显示标签。 |
container | bool | True | 如果为True,则在容器中放置组件,提供一些额外的边框间距。 |
scale | int | None | None | 相对于同一行中相邻组件的宽度比例。例如,如果组件A的scale=2,组件B的scale=1,则A的宽度是B的两倍。应为整数。 |
min_width | int | 160 | 最小像素宽度,如果屏幕空间不足以满足此值,则换行。如果某个scale值导致该组件宽度小于min_width,则首先尊重min_width参数。 |
interactive | bool | None | None | 如果为True,则可以选择该下拉菜单中的选项;如果为False,则禁用选择。如果未提供,则根据组件用作输入还是输出进行推断。 |
visible | bool | True | 如果为False,则隐藏组件。 |
elem_id | str | None | None | 可选字符串,将其分配为该组件在HTML DOM中的id。可用于定位CSS样式。 |
elem_classes | list[str] | str | None | None | 可选字符串列表,将其分配为该组件在HTML DOM中的类。可用于定位CSS样式。 |
allow_custom_value | bool | False | 如果为True,则允许用户输入不在选择列表中的自定义值。 |
change参数介绍
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,则应为空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str | None | None | 定义此参数会在api文档中公开端点。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,则在完成时滚动到输出组件。 |
show_progress | Literal[‘full’] | Literal[‘minimal’] | Literal[‘hidden’] | “full” | 如果为True,则在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,则将请求放入队列中(如果启用了队列)。如果为False,则不将此事件放入队列中,即使启用了队列。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size的长度)。然后,函数必须返回一个元组列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用此方法(只适用于batch=True),则将最大批处理在一起的输入数。 |
preprocess | bool | True | 如果为False,则在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留其作为base64字符串)。 |
postprocess | bool | True | 如果为False,则在将’fn’输出返回到浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 另一个事件被触发时,取消该事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔一段时间运行此事件。以秒为单位。仅在启用队列时才有效。 |
input参数介绍
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,则应为空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str | None | None | 定义此参数会在api文档中公开端点。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,则在完成时滚动到输出组件。 |
show_progress | Literal[‘full’] | Literal[‘minimal’] | Literal[‘hidden’] | “full” | 如果为True,则在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,则将请求放入队列中(如果启用了队列)。如果为False,则不将此事件放入队列中,即使启用了队列。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size的长度)。然后,函数必须返回一个元组列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用此方法(只适用于batch=True),则将最大批处理在一起的输入数。 |
preprocess | bool | True | 如果为False,则在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留其作为base64字符串)。 |
postprocess | bool | True | 如果为False,则在将’fn’输出返回到浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 另一个事件被触发时,取消该事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔一段时间运行此事件。以秒为单位。仅在启用队列时才有效。 |
blur参数介绍
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,则应为空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str | None | None | 定义此参数会在api文档中公开端点。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,则在完成时滚动到输出组件。 |
show_progress | Literal[‘full’] | Literal[‘minimal’] | Literal[‘hidden’] | “full” | 如果为True,则在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,则将请求放入队列中(如果启用了队列)。如果为False,则不将此事件放入队列中,即使启用了队列。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size的长度)。然后,函数必须返回一个元组列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用此方法(只适用于batch=True),则将最大批处理在一起的输入数。 |
preprocess | bool | True | 如果为False,则在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留其作为base64字符串)。 |
postprocess | bool | True | 如果为False,则在将’fn’输出返回到浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 另一个事件被触发时,取消该事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔一段时间运行此事件。以秒为单位。仅在启用队列时才有效。 |
select参数介绍
参数 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
fn | Callable | None | required | 要封装为接口的函数,通常是机器学习模型的预测函数。函数的每个参数对应一个输入组件,函数应返回单个值或值的元组,元组中的每个元素对应一个输出组件。 |
inputs | Component | list[Component] | set[Component] | None | None | 用作输入的组件列表。如果函数不需要输入,则应为空列表。 |
outputs | Component | list[Component] | None | None | 用作输出的组件列表。如果函数不返回输出,则应为空列表。 |
api_name | str | None | None | 定义此参数会在api文档中公开端点。 |
status_tracker | None | None | |
scroll_to_output | bool | False | 如果为True,则在完成时滚动到输出组件。 |
show_progress | Literal[‘full’] | Literal[‘minimal’] | Literal[‘hidden’] | “full” | 如果为True,则在等待期间显示进度动画。 |
queue | bool | None | None | 如果为True,则将请求放入队列中(如果启用了队列)。如果为False,则不将此事件放入队列中,即使启用了队列。如果为None,则使用gradio应用程序的队列设置。 |
batch | bool | False | 如果为True,则函数应处理一批输入,这意味着它应接受每个参数的输入值列表。列表的长度应相等(最多为max_batch_size的长度)。然后,函数必须返回一个元组列表(即使只有一个输出组件),元组中的每个列表对应一个输出组件。 |
max_batch_size | int | 4 | 如果从队列中调用此方法(只适用于batch=True),则将最大批处理在一起的输入数。 |
preprocess | bool | True | 如果为False,则在运行’fn’之前不运行组件数据的预处理(例如,如果使用Image 组件调用此方法,则保留其作为base64字符串)。 |
postprocess | bool | True | 如果为False,则在将’fn’输出返回到浏览器之前不运行组件数据的后处理。 |
cancels | dict[str, Any] | list[dict[str, Any]] | None | None | 另一个事件被触发时,取消该事件的列表。例如,设置cancels=[click_event]将取消click_event,其中click_event是另一个组件的.click方法的返回值。尚未运行的函数(或正在迭代的生成器)将被取消,但当前正在运行的函数将被允许完成。 |
every | float | None | None | 在客户端连接打开时每隔一段时间运行此事件。以秒为单位。仅在启用队列时才有效。 |
结语
本文介绍了gradio库中的Dropdown模块以及其常用的四个方法:change、input、blur和select。通过使用Dropdown模块,我们可以创建交互式下拉菜单,并为应用程序提供更多的选择和功能。希望本文对您理解和使用gradio库中的Dropdown模块有所帮助!