存在的問題,頁面的展示和value不是同一個值的問題,比如說選中了北京,但實際上后端想要的是110000地區碼。
在實際開發中,前端展示給用戶的是可讀的地區名稱(如“北京”),而背后處理時通常需要的是對應的唯一標識符(如 areaid)。因此,我們需要在 Gradio 前端將“地區名稱”映射為 areaid,然后傳遞給后端函數。
<option value="idxxxx">文本</option>
demo1
import gradio as gr# 定義學段選項
segment_options = ["不限", "小學", "初中", "高中", "中職"]# 定義類別選項
category_options = ["不限", "課件", "教案", "學案", "作業", "試卷", "題集", "素材", "示范課", "備課包"]# 定義地區選項
region_options = ["不限","全國","北京","天津","河北","山西","內蒙古","遼寧","吉林","黑龍江","上海","江蘇","浙江","安徽","福建","江西","山東","河南","湖北","湖南","廣東","廣西","海南","重慶","四川","貴州","云南","西藏","甘肅","青海","寧夏","新疆","臺灣","香港","澳門"
]# 定義等級選項
level_options = ["不限", "免費", "普通", "特供", "精品", "教輔"]# 定義更多選項
more_options = ["年份", "年級"]# 定義函數,用于處理用戶輸入
def filter_resources(segment, category, region, level, more):# 這里可以添加邏輯來根據用戶選擇過濾資源result = f"您選擇了:\n學段: {segment}\n類別: {category}\n地區: {region}\n等級: {level}\n更多: {more}"return result# 創建Gradio界面
with gr.Blocks() as demo:gr.Markdown("### 資源篩選工具")# 學段選擇segment = gr.Radio(segment_options, label="學段:", value="不限")# 類別選擇category = gr.Radio(category_options, label="類別:", value="不限")# 地區選擇region = gr.Dropdown(region_options, label="地區:", value="不限")# 等級選擇level = gr.Radio(level_options, label="等級:", value="不限")# 更多選項(下拉菜單)more = gr.Dropdown(more_options, label="更多:", value="年份")# 提交按鈕submit_button = gr.Button("提交")# 輸出結果output = gr.Textbox(label="篩選結果")# 綁定事件submit_button.click(fn=filter_resources,inputs=[segment, category, region, level, more],outputs=output)# 啟動Gradio應用
demo.launch()
import gradio as gr# 定義選項:使用 (顯示文本, 實際值) 的元組
segment_options = [("不限", "all"),("小學", "primary"),("初中", "middle"),("高中", "high"),("中職", "vocational")
]category_options = [("不限", "all"),("課件", "kejian"),("教案", "jiaoan"),("學案", "xuean"),("作業", "zuoye"),("試卷", "shijuan"),("題集", "tiji"),("素材", "sucai"),("示范課", "shifan"),("備課包", "beike")
]# 地區:顯示名稱,返回areaid(整數或字符串均可)
region_options = [("不限", 0),("北京", 110000),("天津", 120000),("河北", 130000),("山西", 140000),("內蒙古", 150000),("遼寧", 210000),("吉林", 220000),("黑龍江", 230000),("上海", 310000),("江蘇", 320000),("浙江", 330000),("安徽", 340000),("福建", 350000),("江西", 360000),("山東", 370000),("河南", 410000),("湖北", 420000),("湖南", 430000),("廣東", 440000),("廣西", 450000),("海南", 460000),("重慶", 500000),("四川", 510000),("貴州", 520000),("云南", 530000),("西藏", 540000),("甘肅", 620000),("青海", 630000),("寧夏", 640000),("新疆", 650000),("臺灣", 710000),("香港", 810000),("澳門", 820000),
]level_options = [("不限", "all"),("免費", "free"),("普通", "normal"),("特供", "tegong"),("精品", "jingpin"),("教輔", "jiaofu")
]more_options = [("年份", "year"),("年級", "grade")
]# 后端函數:接收實際值(如areaid),無需查表
def filter_resources(segment, category, region_areaid, level, more):result = f"""
接收到的后端參數:
學段編碼: {segment}
類別編碼: {category}
地區areaid: {region_areaid}
等級編碼: {level}
篩選維度: {more}
""".strip()return resultwith gr.Blocks() as demo:gr.Markdown("### 資源篩選工具(顯示名 ≠ 實際值)")segment = gr.Radio(segment_options, label="學段:", value="all")category = gr.Radio(category_options, label="類別:", value="all")region = gr.Dropdown(region_options, label="地區:", value=0) # value是areaidlevel = gr.Radio(level_options, label="等級:", value="all")more = gr.Dropdown(more_options, label="更多:", value="year")submit_button = gr.Button("提交")output = gr.Textbox(label="后端接收到的數據")submit_button.click(fn=filter_resources,inputs=[segment, category, region, level, more],outputs=output)demo.launch()
demo2
import gradio as gr# 定義搜索函數(模擬處理邏輯)
def search(all_keywords,any_keywords,exclude_keywords,author,post_time,forum,keyword_location,sort_by,items_per_page
):# 模擬搜索邏輯result = f"""搜索條件:- 包含全部關鍵詞: {all_keywords}- 包含至少一個關鍵詞: {any_keywords}- 不包含關鍵詞: {exclude_keywords}- 發帖作者: {author}- 發帖時間: {post_time}- 所屬版塊: {forum}- 關鍵詞位置: {keyword_location}- 排序方式: {sort_by}- 每頁顯示條數: {items_per_page}"""return result# 創建界面
with gr.Blocks() as demo:gr.Markdown("### 使用以下條件來搜索")# 包含全部關鍵詞all_keywords = gr.Textbox(label="包含全部關鍵詞", placeholder="請輸入")# 包含至少一個關鍵詞any_keywords = gr.Textbox(label="包含至少一個關鍵詞", placeholder="請輸入")# 不包含關鍵詞exclude_keywords = gr.Textbox(label="不包含關鍵詞", placeholder="請輸入")gr.Markdown("### 使用以下條件來縮小搜索結果范圍")# 發帖作者author = gr.Textbox(label="發帖作者", placeholder="請輸入")# 發帖時間post_time = gr.Dropdown(choices=["全部時間", "最近一天", "最近一周", "最近一個月"],label="發帖時間",value="全部時間")# 所屬版塊forum = gr.Dropdown(choices=["所有版塊", "技術討論", "生活分享", "娛樂資訊"],label="所屬版塊",value="所有版塊")# 關鍵詞位置keyword_location = gr.Radio(choices=["帖子的任何地方", "僅限帖子標題", "僅限帖子正文"],label="關鍵詞位置",value="帖子的任何地方")gr.Markdown("### 其他")# 排序方式sort_by = gr.Radio(choices=["按相關度排序", "按發布時間排序"],label="排序方式",value="按相關度排序")# 每頁顯示條數items_per_page = gr.Radio(choices=["每頁顯示 15 條", "每頁顯示 30 條", "每頁顯示 50 條"],label="每頁顯示條數",value="每頁顯示 15 條")# 確定按鈕submit_button = gr.Button("確定")# 取消按鈕cancel_button = gr.Button("取消")# 輸出結果output_text = gr.Textbox(label="搜索結果", interactive=False)# 綁定事件submit_button.click(fn=search,inputs=[all_keywords, any_keywords, exclude_keywords,author, post_time, forum, keyword_location,sort_by, items_per_page],outputs=output_text)# 簡化取消按鈕的實現def cancel_action():# 在這里可以添加任何取消操作,例如重置輸入或關閉應用return "", "", "", "", "全部時間", "所有版塊", "帖子的任何地方", "按相關度排序", "每頁顯示 15 條"cancel_button.click(fn=cancel_action,inputs=None,outputs=[all_keywords, any_keywords, exclude_keywords, author, post_time, forum, keyword_location, sort_by, items_per_page])# 啟動界面
demo.launch()
原始圖