diff --git a/SLS_Python/sls_calc/__main__.py b/SLS_Python/sls_calc/__main__.py index e8565f3..8105afe 100644 --- a/SLS_Python/sls_calc/__main__.py +++ b/SLS_Python/sls_calc/__main__.py @@ -12,7 +12,7 @@ class HPCalculator: def __init__(self, root): self.root = root self.root.title("HP Stack Calculator") - self.root.geometry("450x650") + # self.root.geometry("450x650") self.root.resizable(False, False) # Initialize interpreter @@ -24,24 +24,8 @@ class HPCalculator: self.is_new_entry = True # Set up UI - self.setup_styles() self.create_widgets() - def setup_styles(self): - """Configure custom styles for the calculator""" - style = ttk.Style() - style.theme_use('clam') - - # Configure button styles - style.configure('Calc.TButton', - font=('Arial', 12, 'bold'), - padding=10) - style.configure('Display.TLabel', - font=('Courier', 14), - background='#f0f0f0', - relief='sunken', - padding=5) - def create_widgets(self): """Create all calculator widgets""" # Main container @@ -65,8 +49,7 @@ class HPCalculator: self.stack_labels = [] for i in range(4): label = ttk.Label(stack_frame, - text=f"T{3-i}: 0", - style='Display.TLabel', + text=f"T{3-i}: <>", anchor='e', width=30) label.grid(row=i, column=0, sticky=(tk.W, tk.E), pady=2) @@ -78,46 +61,35 @@ class HPCalculator: entry_frame.grid(row=1, column=0, columnspan=4, sticky=(tk.W, tk.E), pady=(0, 10)) self.entry_label = ttk.Label(entry_frame, - text="0", - style='Display.TLabel', - anchor='e', - font=('Courier', 16, 'bold')) + text="0", + anchor='e', + font=('Courier', 16)) self.entry_label.grid(row=0, column=0, sticky=(tk.W, tk.E)) def create_button_grid(self, parent): """Create the calculator button grid""" buttons = [ - # Row 1: Stack operations - [('√', self.sqrt), ('x²', self.square), ('1/x', self.reciprocal), ('÷', self.divide)], - # Row 2: Numbers and operations - [('7', lambda: self.digit('7')), ('8', lambda: self.digit('8')), - ('9', lambda: self.digit('9')), ('×', self.multiply)], - # Row 3 - [('4', lambda: self.digit('4')), ('5', lambda: self.digit('5')), - ('6', lambda: self.digit('6')), ('−', self.subtract)], - # Row 4 - [('1', lambda: self.digit('1')), ('2', lambda: self.digit('2')), - ('3', lambda: self.digit('3')), ('+', self.add)], - # Row 5 - [('0', lambda: self.digit('0')), ('.', self.decimal), - ('±', self.negate), ('ENTER', self.enter)], - # Row 6: Special functions - [('SWAP', self.swap), ('DROP', self.drop), - ('DUP', self.dup), ('CLR', self.clear)] + [('√', self.sqrt), ('x²', self.square), ('1/x', self.reciprocal), ('NULL', lambda: None)], + [('ENTER', lambda: self.enter(True)), ('SWAP', self.swap), ('<-', self.drop), ('NULL', lambda: None)], + [('7', lambda: self.digit('7')), ('8', lambda: self.digit('8')), ('9', lambda: self.digit('9')), ('÷', self.divide)], + [('4', lambda: self.digit('4')), ('5', lambda: self.digit('5')), ('6', lambda: self.digit('6')), ('×', self.multiply)], + [('1', lambda: self.digit('1')), ('2', lambda: self.digit('2')), ('3', lambda: self.digit('3')), ('−', self.subtract)], + [('0', lambda: self.digit('0')), ('.', self.decimal), ('±', self.negate), ('+', self.add)], ] for row_idx, row in enumerate(buttons, start=2): for col_idx, (text, command) in enumerate(row): - btn = ttk.Button(parent, - text=text, - command=command, - style='Calc.TButton', - width=8) - btn.grid(row=row_idx, column=col_idx, padx=2, pady=2, sticky=(tk.W, tk.E, tk.N, tk.S)) + if text != "NULL": + btn = ttk.Button(parent, + text=text, + command=command, + width=8) + btn.grid(row=row_idx, column=col_idx, padx=2, pady=2, sticky=(tk.W, tk.E, tk.N, tk.S)) # Keyboard bindings - self.root.bind('', lambda e: self.enter()) - self.root.bind('', lambda e: self.enter()) + self.root.bind('', lambda e: self.drop()) + self.root.bind('', lambda e: self.enter(True)) + self.root.bind('', lambda e: self.enter(True)) for i in range(10): self.root.bind(str(i), lambda e, n=str(i): self.digit(n)) self.root.bind('.', lambda e: self.decimal()) @@ -125,7 +97,6 @@ class HPCalculator: self.root.bind('-', lambda e: self.subtract()) self.root.bind('*', lambda e: self.multiply()) self.root.bind('/', lambda e: self.divide()) - self.root.bind('', lambda e: self.clear()) def digit(self, d): """Handle digit button press""" @@ -157,12 +128,14 @@ class HPCalculator: self.entry_buffer = '-' + self.entry_buffer self.update_entry_display() - def enter(self): + def enter(self, key=False): """Push current entry onto stack""" if self.entry_buffer: self.execute_code(self.entry_buffer) self.entry_buffer = "" self.is_new_entry = True + elif key: + self.execute_code("dup") self.update_displays() def add(self): @@ -219,21 +192,6 @@ class HPCalculator: self.execute_code("drop") self.update_displays() - def dup(self): - """Duplicate top stack item""" - self.enter() - self.execute_code("dup") - self.update_displays() - - def clear(self): - """Clear entry and stack""" - self.entry_buffer = "" - self.is_new_entry = True - # Clear the stack - while len(self.interp.stack) > 0: - self.interp.pop() - self.update_displays() - def execute_code(self, code): """Execute stack language code""" try: @@ -274,7 +232,7 @@ class HPCalculator: value_str = self.format_stack_entry(entry) self.stack_labels[i].config(text=f"T{level}: {value_str}") else: - self.stack_labels[i].config(text=f"T{level}: 0") + self.stack_labels[i].config(text=f"T{level}: <>") def format_stack_entry(self, entry): """Format a stack entry for display"""