Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| from src.check_backpack import sort_yaocai | |
| from src.gr_func import init,get_medicines,get_first_material,get_second_material,get_possible_material,get_basename | |
| medicine_list_init = init() | |
| def medicine_select_acc_change_b(medicine_select_acc): | |
| medicine_list = get_medicines(medicine_select_acc) | |
| return gr.Dropdown.update(choices=["无"]+medicine_list,value=medicine_list[0]) | |
| def check_backpack(text,medicine_select,material_num): | |
| yaocai_list = sort_yaocai(text,medicine_select,material_num) | |
| rtn = [[] for _ in range(9)] | |
| for name,grade,num,flag in yaocai_list: | |
| rtn[grade-1].append((f"{name}*{num}",flag)) | |
| rtn = list(map(lambda x:gr.HighlightedText.update(value=x,visible=len(x)!=0),rtn)) | |
| return rtn[-1],rtn[-2],rtn[-3],rtn[-4],rtn[-5],rtn[-6],rtn[-7],rtn[-8],rtn[-9] | |
| def medicine_select_acc_change(medicine_select_acc): | |
| medicine_list = get_medicines(medicine_select_acc) | |
| return gr.Dropdown.update(choices=medicine_list,value=medicine_list[0]) | |
| def run_btn_click(medicine_select,material_1_select,material_2_select): | |
| rtn = medicine_select+"\n" | |
| possible_material_list = get_possible_material(medicine_select,material_1_select,material_2_select) | |
| if len(possible_material_list) == 1: | |
| main_material, auxi_material, material_third_list = possible_material_list[0] | |
| rtn += f"""### | |
| - **主药**:{main_material} | |
| - **辅药**:{auxi_material} | |
| """ | |
| peifang = f"配方:主药{get_basename(main_material)}药引{get_basename(material_third_list[0])}辅药{get_basename(auxi_material)}丹炉陨铁炉" | |
| return rtn,gr.Radio.update(choices=material_third_list,value=material_third_list[0],visible=True),gr.Markdown.update(visible=True,value=peifang),(main_material,auxi_material) | |
| # else: | |
| for index,(main_material,auxi_material,material_third_list) in enumerate(possible_material_list): | |
| rtn += f"""### 选择{index+1} | |
| - **主药**:{main_material} | |
| - **药引**:{",".join(material_third_list)} | |
| - **辅药**:{auxi_material} | |
| """ | |
| return rtn,gr.Radio.update(visible=False),gr.Markdown.update(visible=False,value=""),(main_material,auxi_material) | |
| def medicine_select_change(medicine_select): | |
| a = get_first_material(medicine_select) | |
| return gr.Dropdown.update(choices=["无"]+a,value="无",visible=True),gr.Dropdown.update(visible=True,value="ALL"),gr.Number.update(visible=True,value=16) | |
| def material_1_grade_select_change(medicine_select,material_1_grade_select,material_1_num): | |
| a = get_first_material(medicine_select,material_1_grade_select,material_1_num) | |
| return gr.Dropdown.update(choices=["无"]+a, value="无", visible=True) | |
| def material_1_select_change(medicine_select,material_1_select): | |
| if material_1_select!="无": | |
| a = get_second_material(medicine_select,material_1_select) | |
| return gr.Dropdown.update(choices=["无"] + a, value="无", visible=True), gr.Dropdown.update(visible=True,value="ALL"), gr.Number.update(visible=True, value=16) | |
| else: | |
| return gr.Dropdown.update(choices=["无"], value="无", visible=False), gr.Dropdown.update(visible=False,value="ALL"), gr.Number.update(visible=False, value=16) | |
| def material_2_grade_select_change(medicine_select,material_1_select,material_2_grade_select,material_2_num): | |
| a = get_second_material(medicine_select,material_1_select,material_2_grade_select,material_2_num) | |
| return gr.Dropdown.update(choices=["无"]+a, value="无", visible=True) | |
| def output_Radio_change(output_state,output_Radio): | |
| main_material, auxi_material = output_state | |
| return f"配方:主药{get_basename(main_material)}药引{get_basename(output_Radio)}辅药{get_basename(auxi_material)}丹炉陨铁炉" | |
| with gr.Blocks() as demo: | |
| with gr.Tab("丹药配方"): | |
| gr.Markdown("选择你要炼制的丹药") | |
| with gr.Row(): | |
| with gr.Column(): | |
| with gr.Accordion("丹药限制",open=False): | |
| medicine_select_acc = gr.Radio(["ALL","回复状态", "突破概率", "加攻击力"],value="ALL",show_label=False) | |
| medicine_select = gr.Dropdown(choices=medicine_list_init,value=medicine_list_init[0],label="丹药选择") | |
| with gr.Row(): | |
| material_1_grade_select = gr.Dropdown(choices=["ALL"]+[f"{i}品药材" for i in "一二三四五六七八九"],value="ALL",visible=False,label="药材等级") | |
| material_1_num = gr.Number(value=16,label="最大数量",visible=False) | |
| material_1_select = gr.Dropdown(visible=False,label="第一个药材") | |
| with gr.Row(): | |
| material_2_grade_select = gr.Dropdown(choices=["ALL"]+[f"{i}品药材" for i in "一二三四五六七八九"],value="ALL",visible=False,label="药材等级") | |
| material_2_num = gr.Number(value=16,label="最大数量",visible=False) | |
| material_2_select = gr.Dropdown(visible=False,label="第二个药材") | |
| run_btn = gr.Button("Run") | |
| with gr.Column(): | |
| output_mk = gr.Markdown("输出结果") | |
| with gr.Blocks(): | |
| output_Radio = gr.Radio(visible=False,label="药引") | |
| output_state = gr.State((None,None)) | |
| output_end = gr.Markdown(visible=False) | |
| with gr.Tab("背包查询"): | |
| gr.Markdown("复制全部药材到左边文本框") | |
| with gr.Row(): | |
| with gr.Column(): | |
| with gr.Accordion("丹药限制", open=False): | |
| medicine_select_acc_b = gr.Radio(["ALL", "回复状态", "突破概率", "加攻击力"], value="ALL", | |
| show_label=False) | |
| with gr.Row(): | |
| medicine_select_b = gr.Dropdown(choices=["无"] + medicine_list_init, value="无", | |
| label="丹药选择") | |
| material_num_b = gr.Number(value=16, label="最大数量") | |
| inp_b = gr.Text(label="药材", lines=10) | |
| run_btn_b = gr.Button("run") | |
| with gr.Column(): | |
| gr.Markdown("标注颜色的为炼制丹药需要材料,绿色为数量满足,黄色为缺少") | |
| out_l = [ | |
| gr.HighlightedText(label=f"{i}品药材", visible=False).style(color_map={"-": "yellow", "+": "green"}) | |
| for i in "九八七六五四三二一"] | |
| medicine_select_acc.change(fn=medicine_select_acc_change, inputs=[medicine_select_acc], outputs=[medicine_select]) | |
| medicine_select.change(fn=medicine_select_change,inputs=[medicine_select],outputs=[material_1_select,material_1_grade_select,material_1_num]) | |
| material_1_grade_select.change(fn=material_1_grade_select_change,inputs=[medicine_select,material_1_grade_select,material_1_num],outputs=[material_1_select]) | |
| material_1_num.change(fn=material_1_grade_select_change,inputs=[medicine_select,material_1_grade_select,material_1_num],outputs=[material_1_select]) | |
| material_1_select.change(fn=material_1_select_change,inputs=[medicine_select,material_1_select],outputs=[material_2_select,material_2_grade_select,material_2_num]) | |
| material_2_grade_select.change(fn=material_2_grade_select_change,inputs=[medicine_select, material_1_select, material_2_grade_select, material_2_num],outputs=[material_2_select]) | |
| material_2_num.change(fn=material_2_grade_select_change,inputs=[medicine_select, material_1_select, material_2_grade_select, material_2_num],outputs=[material_2_select]) | |
| run_btn.click(fn=run_btn_click,inputs=[medicine_select,material_1_select,material_2_select],outputs=[output_mk,output_Radio,output_end,output_state]) | |
| output_Radio.change(fn=output_Radio_change,inputs=[output_state,output_Radio],outputs=[output_end]) | |
| # 背包 | |
| medicine_select_acc_b.change(fn=medicine_select_acc_change_b, inputs=[medicine_select_acc_b], | |
| outputs=[medicine_select_b]) | |
| run_btn_b.click(fn=check_backpack, inputs=[inp_b, medicine_select_b, material_num_b], outputs=out_l) | |
| demo.launch() | |