Question: Add this bonus to the following code: Bonus 5 0 points: Add a 'Mode' menu item. The allows the user to switch between standard entry

Add this bonus to the following code: Bonus 50 points: Add a 'Mode' menu item. The allows the user to switch between standard entry
mode and RPN mode. When in RPN mode the last four items on the stack should be shown in the
display. Add a key for x<>y.
# =============================================================================
# ----- MODULE IMPORTS --------------------------------------------------------
# =============================================================================
import tkinter as tk
from tkinter import messagebox
import math
# =============================================================================
# ----- MAIN ROUTINE ----------------------------------------------------------
# =============================================================================
class Calculator(tk.Tk):
def __init__(self):
super().__init__()
self.title("Calculator")
self.geometry("400x600")
self.result_var = tk.StringVar()
self.create_widgets()
def create_widgets(self):
# Display
entry = tk.Entry(self, textvariable=self.result_var, font=('Arial',24), bd=10, insertwidth=2, width=14, borderwidth=4)
entry.grid(row=0, column=0, columnspan=4)
# Buttons
buttons =[
('7',1,0),('8',1,1),('9',1,2),('/',1,3),
('4',2,0),('5',2,1),('6',2,2),('*',2,3),
('1',3,0),('2',3,1),('3',3,2),('-',3,3),
('0',4,0),('.',4,1),('=',4,2),('+',4,3),
('',5,0),('',5,1),('1/x',5,2),('%',5,3),
('CE',6,0)
]
for (text, row, col) in buttons:
button = tk.Button(self, text=text, padx=20, pady=20, font=('Arial',18), command=lambda t=text: self.on_button_click(t))
button.grid(row=row, column=col, sticky="nsew")
# Menu
menu = tk.Menu(self)
self.config(menu=menu)
file_menu = tk.Menu(menu, tearoff=0)
file_menu.add_command(label="Exit", command=self.quit)
menu.add_cascade(label="File", menu=file_menu)
help_menu = tk.Menu(menu, tearoff=0)
help_menu.add_command(label="About", command=self.show_about)
menu.add_cascade(label="Help", menu=help_menu)
def on_button_click(self, button):
if button =="=":
try:
result = eval(self.result_var.get())
self.result_var.set(result)
except Exception as e:
self.result_var.set("Error")
elif button =="CE":
self.result_var.set("")
elif button =="":
try:
value = float(self.result_var.get())
self.result_var.set(-value)
except ValueError:
self.result_var.set("Error")
elif button =="":
try:
value = float(self.result_var.get())
self.result_var.set(math.sqrt(value))
except ValueError:
self.result_var.set("Error")
elif button =="1/x":
try:
value = float(self.result_var.get())
self.result_var.set(1/ value)
except (ValueError, ZeroDivisionError):
self.result_var.set("Error")
elif button =="%":
try:
value = float(self.result_var.get())
self.result_var.set(value /100)
except ValueError:
self.result_var.set("Error")
else:
self.result_var.set(self.result_var.get()+ button)
def show_about(self):
messagebox.showinfo("About", "Author: Cope Hawkins
Date: December 2024")
if __name__=="__main__":
app = Calculator()
app.mainloop()
# =============================================================================
# ----- FUNCTIONS & DEFINITIONS -----------------------------------------------
# =======

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!