import gradio as gr from function_generator import FunctionGenerator def generate_function(sequence_str): try: sequence = [float(x.strip()) for x in sequence_str.split(',')] generator = FunctionGenerator() symbol_expr, general_expr, latex_expr = generator.generate(sequence) return ( f"y = {str(symbol_expr)}", general_expr, f"$$\\Large {latex_expr}$$" ) except Exception as err: return f"错误: {str(err)}", "", "" # 创建Gradio界面 with gr.Blocks() as demo: gr.Markdown("## 数学函数生成器") with gr.Row(): with gr.Column(): # 使用文本框输入 sequence_input = gr.Textbox( label="输入数列(用逗号分隔)", placeholder="例如: 1, 2, 4, 8, 16", lines=1 ) # 示例按钮 with gr.Row(): example_btn1 = gr.Button("示例1: 1, 2, 4, 8, 16") example_btn2 = gr.Button("示例2: 1, 3, 5, 7, 9") example_btn3 = gr.Button("示例3: 1, 4, 9, 16, 25") # 示例按钮点击事件 example_btn1.click(lambda: "1,2,4,8,16", outputs=sequence_input) example_btn2.click(lambda: "1,3,5,7,9", outputs=sequence_input) example_btn3.click(lambda: "1,4,9,16,25", outputs=sequence_input) with gr.Row(): generate_btn = gr.Button("生成函数", variant="primary") with gr.Row(): with gr.Column(): symbol_expr_output = gr.Textbox(label="符号表达式", interactive=False) general_expr_output = gr.Textbox(label="一般数学表达式", interactive=False) latex_expr_output = gr.Markdown(label="渲染的数学公式") # 实时更新 sequence_input.change( fn=generate_function, inputs=sequence_input, outputs=[symbol_expr_output, general_expr_output, latex_expr_output] ) # 生成按钮点击事件 generate_btn.click( fn=generate_function, inputs=sequence_input, outputs=[symbol_expr_output, general_expr_output, latex_expr_output] ) if __name__ == "__main__": demo.launch()