Калькулятор на Python
Всем добрый день, разрабатываю калькулятор, и столкнулся с такой проблемой: калькулятор выполняет все арефметические действия, которые мне нужны, но я не знаю как мне риализовать в действие кнопки MC, MR, MS, M+, M-, Просьба подсказать как правильно это реализовать.
import math
import tkinter as tk
from tkinter import messagebox
class My_Calc(tk.Tk):
# __init__ function for class tkinterApp
def __init__(self, *args, **kwargs):
# __init__ function for class Tk
tk.Tk.__init__(self, *args, **kwargs)
# creating a container
container = tk.Frame(self)
container.grid(row=0, column=0)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# initializing frames to an empty array
self.my_frames = {}
for F, geometry in zip((Normal_Mode, Advanced_Mode, Advanced_Mode_2),
('355x395+500+200', '710x400+400+200', '1000x400+300+200')):
page_name = F.__name__
my_frame = F(parent=container, controller=self)
self.my_frames[page_name] = (my_frame, geometry)
my_frame.grid(row=0, column=0, sticky="nsew")
self.show_frame('Normal_Mode')
def show_frame(self, cont):
my_frame1, geometry = self.my_frames[str(cont)]
self.update_idletasks()
self.geometry(geometry)
my_frame1.tkraise()
def my_label(self, text='', width=29, columnspan=5):
my_label = tk.Label(self, text=text, font='Helvetica 15 bold', anchor="center", width=width)
my_label.grid(row=0, column=0, columnspan=columnspan, sticky="nsew", pady=5)
def my_entry(self, columnspan=0):
self.my_entry = tk.Entry(self, justify="right", bd=9, font='Arial 15 bold')
self.my_entry.insert(0, "0")
self.my_entry.grid(row=1, column=0, columnspan=columnspan, sticky="nsew", pady=5)
def my_page(self, number, page='Advanced_Mode'):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg='red',
command=lambda: self.controller.show_frame(page))
def press_the_button(self, number):
current = self.my_entry.get()
if current[0] == '0' and len(current) == 1:
current = current[1:]
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, str(current) + str(number))
def my_button_2(self, number, bg='gray'):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg=bg,
command=lambda: self.press_the_button(number))
def my_button(self, number, bg='gray'):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg=bg,
command=lambda: self.my_operations(number))
def my_operations(self, operation):
current_number = self.my_entry.get()
if current_number[-1] in '-+/*':
current_number = current_number[:-1]
elif '+' in current_number or '-' in current_number or '*' in current_number or '/' in current_number:
self.my_calk(self)
current_number = self.my_entry.get()
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, current_number + operation)
def my_button_equals(self, number, bg='yellow'):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg=bg,
command=lambda: self.my_calk(number)).grid(row=7, column=4, sticky="nsew", pady=8, padx=8)
def my_calk(self, number):
current_number = self.my_entry.get()
if current_number[-1] in '+-/*':
operation = current_number[-1]
current_number = current_number[:-1] + operation + current_number[:-1]
self.my_entry.delete(0, tk.END)
try:
a = self.my_entry.insert(0, eval(current_number))
except (SyntaxError, NameError):
self.my_entry.insert(0, 'Вводить нужно только цифры!!!')
except ZeroDivisionError:
self.my_entry.insert(0, 'На ноль делить нельзя!!!')
def my_button_clear(self, number):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg='red',
command=lambda: self.my_clear(number)).grid(row=2, column=4, sticky="nsew", pady=20, padx=8)
def my_clear(self, number):
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, '0')
def my_button_exponentiation(self):
current_number = self.my_entry.get()
current_number = str(int(current_number)**2)
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, eval(current_number))
def my_button_exponentiation_1(self):
return tk.Button(self, text='x^y', width=5, height=1, font='Helvetica 8 bold', bd=4, bg='grey',
command=lambda: self.my_button_exponentiation()).grid(row=4, column=4, sticky="nsew", pady=8, padx=8)
def my_button_memory(self):
pass
def my_button_memory_1(self, number):
return tk.Button(self, text=number, width=5, height=1, font='Helvetica 8 bold', bd=4, bg='#00bfff',
command=lambda: self.my_button_memory())
def my_buttom_interest(self):
pass
def my_buttom_interest_1(self):
return tk.Button(self, text="%", width=5, height=1, font='Helvetica 8 bold', bd=4, bg='grey',
command=lambda: self.my_buttom_interest()).grid(row=3, column=0, sticky="nsew", pady=8, padx=8)
def my_button_back(self):
pass
def my_button_back_1(self):
return tk.Button(self, text="←", width=5, height=1, bg='#00bfff', font='Helvetica 8 bold', bd=4,
command=lambda: self.my_button_back()).grid(row=3, column=1, sticky="nsew", pady=8, padx=8)
def my_button_1_x(self):
pass
def my_button_1_x_1(self):
return tk.Button(self, text="1/x", width=5, height=1, bg='grey', font='Helvetica 8 bold', bd=4,
command=lambda: self.my_button_1_x()).grid(row=3, column=2, sticky="nsew", pady=8, padx=8)
def my_button_minus_1(self,number = '-'):
return tk.Button(self, text="+/-", width=5, height=1, bg='grey', font='Helvetica 8 bold', bd=4,
command=lambda: self.press_the_button(number)).grid(row=6, column=4, sticky="nsew", pady=8, padx=8)
def my_button_x_squared(self):
current_number = self.my_entry.get()
try:
current_number = math.sqrt(int(current_number))
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, eval(str(current_number)))
except ValueError:
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, 'Нельзя вычесть квадратный корень из отрицаиельного числа!!!')
def my_button_x_squared_1(self):
return tk.Button(self, text="√", width=5, height=1, bg='grey', font='Helvetica 8 bold', bd=4,
command=lambda: self.my_button_x_squared()).grid(row=5, column=4, sticky="nsew", pady=8, padx=8)
def my_button_clear_minus(self):
self.my_entry.delete(0, tk.END)
self.my_entry.insert(0, '0')
def my_button_clear_minus_1(self):
return tk.Button(self, text="CE", width=5, height=1, bg='red', font='Helvetica 8 bold', bd=4,
command=lambda: self.my_button_clear_minus()).grid(row=3, column=4, sticky="nsew", pady=8, padx=8)
class Normal_Mode(tk.Frame, My_Calc):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
My_Calc.my_label(self, text='Калькулятор обычный режим', columnspan=5)
My_Calc.my_entry(self, columnspan=5)
My_Calc.my_page(self, "≡", page='Advanced_Mode').grid(row=2, column=0, sticky="nsew", pady=20, padx=8)
My_Calc.my_button_clear(self, "C")
My_Calc.my_button_memory_1(self, "MC").grid(row=3, column=0, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_memory_1(self, "MR").grid(row=3, column=1, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_memory_1(self, "MS").grid(row=3, column=2, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_memory_1(self, "M+").grid(row=3, column=3, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_memory_1(self, "M-").grid(row=3, column=4, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 7, 'yellow').grid(row=4, column=0, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 8, 'yellow').grid(row=4, column=1, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 9, 'yellow').grid(row=4, column=2, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 4, 'yellow').grid(row=5, column=0, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 5, 'yellow').grid(row=5, column=1, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 6, 'yellow').grid(row=5, column=2, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 1, 'yellow').grid(row=6, column=0, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 2, 'yellow').grid(row=6, column=1, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 3, 'yellow').grid(row=6, column=2, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_2(self, 0, 'yellow').grid(row=7, column=0, columnspan=2, sticky="nsew", pady=8,
padx=8)
My_Calc.my_button_2(self, ".", 'yellow').grid(row=7, column=2, sticky="nsew", pady=8, padx=8)
My_Calc.my_button(self, "*", 'grey').grid(row=5, column=3, sticky="nsew", pady=8, padx=8)
My_Calc.my_button(self, "-", 'grey').grid(row=6, column=3, sticky="nsew", pady=8, padx=8)
My_Calc.my_button(self, '/', 'grey').grid(row=4, column=3, sticky="nsew", pady=8, padx=8)
My_Calc.my_button(self, "+", 'grey').grid(row=7, column=3, sticky="nsew", pady=8, padx=8)
My_Calc.my_button_exponentiation_1(self)
My_Calc.my_button_x_squared_1(self)
My_Calc.my_button_minus_1(self)
My_Calc.my_button_equals(self, "=", '#00bfff')
class Advanced_Mode(tk.Frame, My_Calc):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
class Advanced_Mode_2(tk.Frame, My_Calc):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
# Калькулятор инжинерный режим
if __name__ == '__main__':
my_app = My_Calc()
my_app.title('Миронов Дмитрий Валерьевич')
my_app.resizable(False, False)
my_app.mainloop()