File size: 2,944 Bytes
01d6799
 
 
 
b9cbd59
66b71f1
01d6799
66b71f1
01d6799
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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()