add 30+ or more feature, change layout, upgrade everything, add menu etc, add so many stuff : import sys
import math
from PyQt5.QtWidgets import (
    QApplication, QWidget, QLabel, QLineEdit, QPushButton,
    QVBoxLayout, QHBoxLayout, QMessageBox
)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette, QColor, QFont

class EnhancedCasioCalculator(QWidget):
    def __init__(self):
        super().__init__()
        self.memory = 0  # Memory storage
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('Enhanced Casio Calculator')
        self.setGeometry(100, 100, 400, 700)
        self.setFixedSize(400, 700)

        # Set background color
        palette = QPalette()
        palette.setColor(QPalette.Window, QColor(240, 240, 240))
        self.setPalette(palette)

        # Font setup
        font = QFont('Arial', 16)
        self.setFont(font)

        # Layout
        main_layout = QVBoxLayout()
        main_layout.setAlignment(Qt.AlignCenter)

        # Display Section
        self.display = QLineEdit()
        self.display.setPlaceholderText('0')
        self.display.setReadOnly(True)
        self.display.setAlignment(Qt.AlignRight)
        self.display.setFixedHeight(50)
        main_layout.addWidget(self.display)

        # Buttons layout
        buttons = [
            '7', '8', '9', '/', 'F1',
            '4', '5', '6', '*', 'F2',
            '1', '2', '3', '-', 'F3',
            '0', 'C', '=', '+', 'F4',
            'sin', 'cos', 'tan', 'M+', 'F5',
            'sqrt', 'log', 'exp', 'MC', 'F6'
        ]

        grid_layout = QVBoxLayout()
        for i in range(0, len(buttons), 5):
            row_layout = QHBoxLayout()
            for j in range(5):
                if i + j < len(buttons):
                    button = QPushButton(buttons[i + j])
                    button.setFixedSize(80, 80)
                    button.clicked.connect(self.on_button_click)
                    self.style_button(button)
                    row_layout.addWidget(button)
            grid_layout.addLayout(row_layout)

        main_layout.addLayout(grid_layout)
        self.setLayout(main_layout)

    def style_button(self, button):
        button.setStyleSheet("""
            QPushButton {
                background-color: #e0e0e0;
                border: 1px solid #bdbdbd;
                font-size: 20px;
            }
            QPushButton:hover {
                background-color: #d0d0d0;
            }
        """)

    def on_button_click(self):
        button_text = self.sender().text()

        if button_text == 'C':
            self.display.clear()
        elif button_text == '=':
            try:
                result = eval(self.display.text())
                self.display.setText(str(result))
            except Exception as e:
                QMessageBox.critical(self, 'Error', 'Invalid Input')
                self.display.clear()
        elif button_text in ['sin', 'cos', 'tan', 'sqrt', 'log', 'exp']:
            try:
                value = float(self.display.text())
                if button_text == 'sin':
                    result = math.sin(math.radians(value))
                elif button_text == 'cos':
                    result = math.cos(math.radians(value))
                elif button_text == 'tan':
                    result = math.tan(math.radians(value))
                elif button_text == 'sqrt':
                    result = math.sqrt(value)
                elif button_text == 'log':
                    result = math.log10(value)
                elif button_text == 'exp':
                    result = math.exp(value)
                self.display.setText(str(result))
            except Exception as e:
                QMessageBox.critical(self, 'Error', 'Invalid Input')
                self.display.clear()
        elif button_text == 'M+':
            try:
                self.memory += float(self.display.text())
                self.display.clear()
            except ValueError:
                QMessageBox.critical(self, 'Error', 'Invalid Input')
        elif button_text == 'MC':
            self.memory = 0
        elif button_text.startswith('F'):
            QMessageBox.information(self, 'Function Key', f'{button_text} is not yet implemented.')
        else:
            current_text = self.display.text()
            if current_text == '0':
                self.display.setText(button_text)
            else:
                self.display.setText(current_text + button_text)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    calculator = EnhancedCasioCalculator()
    calculator.show()
    sys.exit(app.exec_())