代码如下
要查看不同的效果,请更改start_server方法中的applications参数
import time
import pywebio
from pywebio.input import *
from pywebio.output import put_text, put_markdown, put_buttons, popup
from datetime import date, timedelta
def check_age(age):
if age >= 28:
return '打工人'
elif age <= 3:
return '小宝宝'
else:
return '学生党'
def input_case1():
# 点击提交后,直接在输入框下方展示校验结果
input('输入你的年龄', type=NUMBER, validate=check_age)
def input_case2():
# 点击提交后,直接在输入框下方展示校验结果
name = input('输入你的姓名', placeholder="请输入")
put_text(f"你叫{name}")
def textarea_case1():
res = textarea('Text area', code={
'mode': "python",
'theme': 'darcula'
})
put_text(res)
def textarea_case2():
res = textarea('Text area')
put_text(res)
def input_slider():
"""
value: 滑块的初始值
min_value: 滑块允许的最小值
max_value: 滑块允许的最大值
step: 滑块的步长
"""
value = slider(label="请选择数值:", value=5, min_value=1, max_value=100, step=1)
put_text(value)
def checkbox_case1():
check = checkbox("请选择:", ["A", "B", "C", "D"])
put_text(f"你选择了{check}")
def checkbox_case2():
check = checkbox("请选择:", ["A", "B", "C", "D"], inline=True)
put_text(f"你选择了{check}")
def radio_case1():
check = radio("请选择:", ["A", "B", "C", "D"], value="B")
put_text(f"你选择了{check}")
def radio_case2():
check = radio("请选择:", ["A", "B", "C", "D"], inline=True)
put_text(f"你选择了{check}")
def actions_case1():
confirm = actions('确定要提交信息吗?', ['确认', '取消'], help_text='删除后无法恢复')
put_markdown(f'你点击的`{confirm}` 按钮').show()
def input_update_case1():
country2city = {
'China': ['Beijing', 'Shanghai', 'Hong Kong'],
'USA': ['New York', 'Los Angeles', 'San Francisco'],
}
countries = list(country2city.keys())
location = input_group("Select a location", [
select('Country', options=countries, name='country',
onchange=lambda c: input_update('city', options=country2city[c])),
select('City', options=country2city[countries[0]], name='city'),
])
put_text(location)
def set_now_ts(set_value):
set_value(int(time.time()))
# set_value(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
def set_ts():
# 当type=NUMBER时,只能显示时间戳,因此set_now_ts方法需要生成的是时间戳而不是字符串格式
# 当type=TEXT,可以显示字符串格式的时间,
ts = input('Timestamp', type=NUMBER, action=('Now', set_now_ts), placeholder="点击Now查看现在的时间",
help_text="时间戳")
put_text(ts)
def select_date(set_value):
with popup('Select Date'):
put_buttons(['Today'], onclick=[lambda: set_value(date.today(), 'Today')])
put_buttons(['Yesterday'], onclick=[lambda: set_value(date.today() - timedelta(days=1), 'Yesterday')])
def set_date():
d = input('Date', action=('Select', select_date), readonly=True)
put_text(type(d), d)
def select1():
sel = select("选择选项:", options=["A", "B"])
put_text(f"你选择的是{sel}")
def select2():
# options是列表
# mutiple是false,所以即使有多个选项selected是true,也只有一个会被默认选中(会取最后一个selected是true的选项)
sel = select("选择选项:", options=[["A", 0, False, True], ["B", 1, True, False], ["C", 2, False, False]])
put_text(f"你选择的是{sel}")
def select3():
# options是元组
# mutiple是false,所以即使有多个选项selected是true,也只有一个会被默认选中(会取最后一个selected是true的选项)
sel = select("选择选项:", options=[("A", 0, False, True), ("B", 1, True, False), ("C", 2, False, False)])
put_text(f"你选择的是{sel}")
def select4():
# options是字典
# mutiple是false,所以即使有多个选项selected是true,也只有一个会被默认选中(会取最后一个selected是true的选项)
sel = select("选择选项:", options=[{"label": "A", "value": 0, "selected": False, "disabled": True},
{"label": "B", "value": 1, "selected": True, "disabled": False},
{"label": "C", "value": 2, "selected": False, "disabled": False}])
put_text(f"你选择的是{sel}")
def multiple_select_1():
sel = select("支持多选:", ["A", "B", "C"], multiple=True, value=["A", "C"])
put_text(f"你选择的是{sel}")
def multiple_select_2():
sel = select("选择选项:", options=[("A", 0), ("B", 1), ("C", 2)], multiple=True)
put_text(f"你选择的是{sel}")
if __name__ == '__main__':
pywebio.start_server(input_update_case1, port=19001, debug=True, cdn=False, auto_open_webbrowser=False)