liandan / app.py
chewing's picture
add project files
f583104
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()