Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import re | |
| API_URL = "http://localhost:8000/calculate" | |
| def calculate(expression): | |
| response = requests.post(API_URL, json={"expression": expression}) | |
| result = response.json() | |
| if "error" in result: | |
| return result["error"] | |
| return result["result"] | |
| def clear_display(): | |
| return "" | |
| def append_symbol(current_expression, symbol): | |
| return current_expression + symbol | |
| def validate_expression(expression): | |
| if expression == "ERROR": | |
| return expression | |
| valid_expression = re.sub(r'[^0-9+\-*/.]', '', expression) | |
| return valid_expression | |
| with gr.Blocks() as demo: | |
| display = gr.Textbox(max_lines=1, value="", label="Expression", interactive=True) | |
| display.change(fn=validate_expression, inputs=display, outputs=display) | |
| with gr.Row(): | |
| gr.Button("AC", variant="primary", scale=3, elem_classes=["btn-AC"]).click(clear_display, outputs=display) | |
| gr.Button("+", variant="primary", scale=1, elem_classes=["btn"]).click(lambda x: append_symbol(x, "+"), inputs=display, outputs=display) | |
| with gr.Row(): | |
| for symbol in ["7", "8", "9"]: | |
| gr.Button(symbol, elem_classes=["btn"]).click(lambda x, s=symbol: append_symbol(x, s), inputs=display, outputs=display) | |
| gr.Button("-", variant="primary", elem_classes=["btn"]).click(lambda x: append_symbol(x, "-"), inputs=display, outputs=display) | |
| with gr.Row(): | |
| for symbol in ["4", "5", "6"]: | |
| gr.Button(symbol, elem_classes=["btn"]).click(lambda x, s=symbol: append_symbol(x, s), inputs=display, outputs=display) | |
| gr.Button("x", variant="primary", elem_classes=["btn"]).click(lambda x: append_symbol(x, "*"), inputs=display, outputs=display) | |
| with gr.Row(): | |
| for symbol in ["1", "2", "3"]: | |
| gr.Button(symbol, elem_classes=["btn"]).click(lambda x, s=symbol: append_symbol(x, s), inputs=display, outputs=display) | |
| gr.Button("/", variant="primary", elem_classes=["btn"]).click(lambda x: append_symbol(x, "/"), inputs=display, outputs=display) | |
| with gr.Row(): | |
| for symbol in ["0", "."]: | |
| gr.Button(symbol, elem_classes=["btn"]).click(lambda x, s=symbol: append_symbol(x, s), inputs=display, outputs=display) | |
| gr.Button("=", variant="primary", scale=2, elem_classes=["btn-equalto"]).click(calculate, inputs=display, outputs=display) | |
| display.submit(calculate, inputs=display, outputs=display) | |
| demo.css = ''' | |
| body, .gradio-container { | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| height: 100vh; | |
| } | |
| .gradio-container { | |
| flex-direction: column; | |
| width: auto; | |
| } | |
| .btn { | |
| font-size: 1.5rem; | |
| min-width: 5rem; | |
| max-width: 6rem; | |
| } | |
| .btn-AC{ | |
| font-size: 1.5rem; | |
| min-width: 5rem; | |
| max-width: 20rem; | |
| } | |
| .btn-equalto{ | |
| font-size: 1.5rem; | |
| min-width: 5rem; | |
| max-width: 13rem; | |
| } | |
| ''' | |
| demo.launch() |