# narekmardoyan/calculator architecture

> Architecture diagram of the GitHub repository narekmardoyan/calculator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/narekmardoyan/calculator
- Repository: https://github.com/narekmardoyan/calculator

## Overview

This is a small PySide6 desktop calculator. The user enters an expression through the button grid; button handlers update the display or evaluate the expression, with division by zero shown briefly before the display is cleared. The single source file also creates and centers the window. Responsibilities are separated below for clarity, though they share one file.

Main entry points: [`Calculator.py`](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py) (Button handlers)

## Diagram (Mermaid)

```mermaid
flowchart TD

node_user(("User"))
node_main["Application entry<br/>[Calculator.py]"]
node_visual["Visual setup<br/>[Calculator.py]"]
node_window["Calculator window<br/>[Calculator.py]"]
node_buttons["Button handlers<br/>[Calculator.py]"]
node_display["Expression display<br/>[Calculator.py]"]
node_evaluator["Expression evaluation<br/>[Calculator.py]"]
node_screen["Screen geometry"]
node_timer["Qt timer"]

node_main -->|"creates"| node_visual
node_main -->|"starts event loop"| node_window
node_visual -->|"creates"| node_window
node_visual -->|"creates"| node_buttons
node_visual -->|"shows"| node_window
node_window -->|"contains"| node_display
node_window -->|"reads geometry"| node_screen
node_user -->|"clicks"| node_buttons
node_buttons -->|"updates"| node_display
node_buttons -->|"evaluates expression"| node_evaluator
node_buttons -->|"closes"| node_window
node_buttons -->|"schedules clear"| node_timer
node_timer -->|"calls clearing"| node_buttons

click node_main "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"
click node_visual "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"
click node_window "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"
click node_buttons "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"
click node_display "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"
click node_evaluator "https://github.com/narekmardoyan/calculator/blob/main/Calculator.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_user,node_screen toneBlue
class node_main,node_visual,node_window,node_display,node_evaluator toneTeal
class node_buttons toneMint
class node_timer toneIndigo
```

## Components

### Other components

- **User**
- [Application entry](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- [Visual setup](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- [Calculator window](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- [Button handlers](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- [Expression display](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- [Expression evaluation](https://github.com/narekmardoyan/calculator/blob/main/Calculator.py): `Calculator.py`
- **Screen geometry**
- **Qt timer**

## Connections

- Application entry → Visual setup: creates
- Application entry → Calculator window: starts event loop
- Visual setup → Calculator window: creates
- Visual setup → Button handlers: creates
- Visual setup → Calculator window: shows
- Calculator window → Expression display: contains
- Calculator window → Screen geometry: reads geometry
- User → Button handlers: clicks
- Button handlers → Expression display: updates
- Button handlers → Expression evaluation: evaluates expression
- Button handlers → Calculator window: closes
- Button handlers → Qt timer: schedules clear
- Qt timer → Button handlers: calls clearing
