0Learn commited on
Commit
54c0a26
·
verified ·
1 Parent(s): 7c3e7c7

Update frontend.py

Browse files
Files changed (1) hide show
  1. frontend.py +79 -2
frontend.py CHANGED
@@ -21,10 +21,87 @@ def calculate(expression):
21
  except requests.RequestException as e:
22
  return expression, f"Network Error: {str(e)}", "\n".join(reversed(history))
23
 
24
- # ... (rest of the code remains the same)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
 
26
  def create_interface():
27
- # ... (interface creation code remains the same)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
 
29
  return iface
30
 
 
21
  except requests.RequestException as e:
22
  return expression, f"Network Error: {str(e)}", "\n".join(reversed(history))
23
 
24
+ def update_expression(expression, value):
25
+ if expression == "0" and value not in ['.', '(', ')']:
26
+ return value
27
+ if value in ['sin', 'cos', 'tan', 'log', 'ln', 'sqrt']:
28
+ return expression + value + '('
29
+ return expression + value
30
+
31
+ def backspace(expression):
32
+ return expression[:-1] if len(expression) > 1 else "0"
33
+
34
+ def clear(expression):
35
+ return "0"
36
+
37
+ css = """
38
+ .calculator-display { font-family: 'Digital-7', 'Courier New', monospace; font-size: 24px; }
39
+ .calculator-result { font-family: 'Digital-7', 'Courier New', monospace; font-size: 72px; }
40
+ .calculator-button { font-family: 'Arial', sans-serif; font-size: 18px; }
41
+ .number-button { background-color: #e0e0e0; }
42
+ .basic-op-button { background-color: #f0f0f0; }
43
+ .advanced-op-button { background-color: #ffa500; }
44
+ .calculator-box { border: 1px solid #ccc; padding: 10px; margin: 5px; border-radius: 5px; }
45
+ """
46
 
47
  def create_interface():
48
+ with gr.Blocks(css=css) as iface:
49
+ gr.Markdown("# Scientific Calculator")
50
+
51
+ with gr.Row():
52
+ with gr.Column(scale=2):
53
+ display = gr.Textbox(value="0", label="Display", elem_classes=["calculator-display"])
54
+ with gr.Column(scale=1):
55
+ result_display = gr.Textbox(value="", label="Result", elem_classes=["calculator-result"])
56
+
57
+ with gr.Row():
58
+ history_display = gr.Textbox(label="History (Last 5 Calculations)", lines=5)
59
+
60
+ with gr.Row():
61
+ with gr.Column(scale=2):
62
+ with gr.Column(elem_classes=["calculator-box"]):
63
+ # Number pad (3x4 grid)
64
+ for i in range(3):
65
+ with gr.Row():
66
+ for j in range(3):
67
+ num = str(7 - 3*i + j)
68
+ gr.Button(num, elem_classes=["calculator-button", "number-button"]).click(
69
+ lambda x, v=num: update_expression(x, v), inputs=display, outputs=display)
70
+ with gr.Row():
71
+ gr.Button("0", elem_classes=["calculator-button", "number-button"]).click(
72
+ lambda x: update_expression(x, "0"), inputs=display, outputs=display)
73
+ gr.Button(".", elem_classes=["calculator-button", "number-button"]).click(
74
+ lambda x: update_expression(x, "."), inputs=display, outputs=display)
75
+ gr.Button("=", elem_classes=["calculator-button", "basic-op-button"]).click(
76
+ calculate, inputs=display, outputs=[display, result_display, history_display])
77
+
78
+ with gr.Column(scale=1):
79
+ with gr.Column(elem_classes=["calculator-box"]):
80
+ # Basic operations
81
+ for op, symbol in [("add", "+"), ("sub", "-"), ("mul", "*"), ("div", "/")]:
82
+ gr.Button(symbol, elem_classes=["calculator-button", "basic-op-button"]).click(
83
+ lambda x, v=symbol: update_expression(x, v), inputs=display, outputs=display)
84
+ gr.Button("(", elem_classes=["calculator-button", "basic-op-button"]).click(
85
+ lambda x: update_expression(x, "("), inputs=display, outputs=display)
86
+ gr.Button(")", elem_classes=["calculator-button", "basic-op-button"]).click(
87
+ lambda x: update_expression(x, ")"), inputs=display, outputs=display)
88
+ gr.Button("C", elem_classes=["calculator-button", "basic-op-button"]).click(
89
+ clear, inputs=display, outputs=display)
90
+ gr.Button("⌫", elem_classes=["calculator-button", "basic-op-button"]).click(
91
+ backspace, inputs=display, outputs=display)
92
+
93
+ with gr.Column(scale=1):
94
+ with gr.Column(elem_classes=["calculator-box"]):
95
+ # Advanced operations
96
+ for func in ["sin", "cos", "tan", "log", "ln", "sqrt"]:
97
+ gr.Button(func, elem_classes=["calculator-button", "advanced-op-button"]).click(
98
+ lambda x, v=func: update_expression(x, v), inputs=display, outputs=display)
99
+ gr.Button("^", elem_classes=["calculator-button", "advanced-op-button"]).click(
100
+ lambda x: update_expression(x, "^"), inputs=display, outputs=display)
101
+ gr.Button("π", elem_classes=["calculator-button", "advanced-op-button"]).click(
102
+ lambda x: update_expression(x, "pi"), inputs=display, outputs=display)
103
+ gr.Button("e", elem_classes=["calculator-button", "advanced-op-button"]).click(
104
+ lambda x: update_expression(x, "e"), inputs=display, outputs=display)
105
 
106
  return iface
107