目录
Overview
Pin widgets
pin_input
最基本的文本框pin组件
获取pin组件的值?
pin_wait_change 监听pin组件的变化
pin_update 更新pin组件的输出属性
???????
Overview
我们已经知道,PyWebIO中的输入函数是阻塞式的,输入表单会在成功提交后被销毁。在大多数场景下,使用这种方式接收用户输入已经够用了。但在一些场景下,你或许希望输入表单在提交后不消失,并且可以继续接收输入。 所以,PyWebIO提供了?pin ?模块来实现持续性输入。
pin ?模块主要有3部分内容:
- pin 组件(widgets)
- pin_wait_change()
- pin_update()
Pin widgets
pin_input
每个pin组件函数都对应一个?input ?模块中的输入函数。(出于性能原因,没有提供?file_upload() 函数对应的pin组件)
Pin组件函数支持大多数对应的输入函数的参数。这里列举了两者之间的一些不同:
- Pin组件函数的第一个参数始终是Pin组件的?
name ?,且当输出了同名的pin组件时,旧的pin组件会不可用。 - Pin组件函数不支持?
on_change ?、?validate ?回调,也不支持?required ?参数。 - Pin组件函数多了用于输出控制的?
scope ?和?position ?参数。
组件都有:
put_input -- 文本输入组件 put_textarea -- 文本域输入组件 put_select -- 下拉选择输入组件 put_checkbox -- 多选框组件 put_radio -- 单选按钮组件 put_slider -- 滑块输入组件 put_actions -- action按钮 以上组件参数,可见input相对应的参数。
最基本的文本框pin组件
from pywebio.pin import *
#这里要和前面的input区分开来。
put_input('input2', label='This is a input widget').show()
put_select('select', options=['A', 'B', 'C']).show()
with use_scope('search-area'):
put_input('search', placeholder='Search')
put_row([
put_input('input'),
put_select('select', options=['A', 'B', 'C'])
])
with use_scope('search-area'):
put_input('search_2', placeholder='Search-2')
put_row([
put_input('input_2'),
put_select('select_2', options=['D', 'E', 'F'])
])
获取pin组件的值?
#通过使用pin对象来获取pin组件的值
put_input('pin_name')
put_buttons(['Get Pin Value'], lambda _: put_text(pin.pin_name))
#pin组件函数的第一个参数为pin组件的 name
pin['pin_name'] == pin.pin_name
#同时name只能包含字母、数字和下划线,否则:
#AssertionError: pin `name` can only contain letters, digits and underscore
pin_wait_change 监听pin组件的变化
pywebio.pin.pin_wait_change(*names, timeout=None)
pin_wait_change() ?监听一组pin组件,当其中任意一个的值发生变化后,函数返回发生变化的组件的?name ?和值。
参数
- names(str) - pin组件
name 列表 - timeout(int/None) - 当?
timeout ?为正数时,?pin_wait_change() ?会最多阻塞?timeout ?秒然后返回?None ?如果这段时间内监听的pin组件的值没有发生变化的话。 将?timeout ?设置为?None ?(默认)来关闭超时
{"name": 发生变化的pin组件的name, "value": 发生变化的pin组件的当前值} ?, 当超时发生后,返回?None
put_input('a', type='number', value=0)
put_input('b', type='number', value=0)
while True:
changed = pin_wait_change('a', 'b')
with use_scope('res', clear=True):
put_code(changed)
put_text("a + b = %s" % (pin.a + pin.b))
pin_update 更新pin组件的输出属性
pywebio.pin.pin_update(name, **spec)
?参数
- name(str) - 目标pin组件的
name - spec - 需要被更新的pin组件的参数。注意以下参数无法被更新:?
type ,?name ,?code ,?multiple
put_input('c', type='number', value=0, help_text="你动我试试?").show()
pin_update('c', value=1, help_text="试试就试试!")
?
该代码已经上传至github:GitHub - wujianming604/learn-PyWebIO: pywebio 自学中
组件的运用还是要看自己的项目需求,?我前阵子写了个比较简单的小项目,针对sanger截图的,后面找个时间写上来。
|