damntae
Обычно "M+" означает, что вы добавляете текущее значение (результат) к значению в памяти, а "M-" означает, что вы вычитаете текущее значение (результат) из значения в памяти. Таким образом, вы можете сохранить значение в памяти и использовать его позже для выполнения арифметических операций
Answers & Comments
Ответ:
import tkinter as tk
from tkinter import ttk
def calculate():
try:
num1 = float(entry1.get())
num2 = float(entry2.get())
operator = operator_var.get()
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
result_label.config(text="На ноль делить нельзя")
return
result = num1 / num2
elif operator == "^":
result = num1 ** num2
else:
result_label.config(text="Выберите действие")
return
result_label.config(text=f"Результат: {result:.2f}")
except ValueError:
result_label.config(text="Введите числа")
def change_sign():
try:
current_result = float(result_label.cget("text").split()[-1])
result_label.config(text=f"Результат: {current_result * -1:.2f}")
except ValueError:
pass
def clear():
entry1.delete(0, tk.END)
entry2.delete(0, tk.END)
operator_var.set("")
result_label.config(text="Получите ответ")
# Создаем главное окно
root = tk.Tk()
root.title("Калькулятор")
# Создаем и размещаем виджеты с использованием ttk
style = ttk.Style()
style.configure("TButton", font=("Arial", 14))
style.configure("TLabel", font=("Arial", 16))
style.configure("TEntry", font=("Arial", 14))
entry1 = ttk.Entry(root)
entry2 = ttk.Entry(root)
operator_var = tk.StringVar()
entry1.grid(row=0, column=0, padx=10, pady=10)
entry2.grid(row=0, column=1, padx=10, pady=10)
ttk.Label(root, text="Первое число:").grid(row=1, column=0)
ttk.Label(root, text="Второе число:").grid(row=1, column=1)
result_label = ttk.Label(root, text="Получите ответ")
result_label.grid(row=2, column=0, columnspan=2, pady=20)
operators_frame = ttk.Frame(root)
operators_frame.grid(row=3, column=0, columnspan=2)
ttk.Button(operators_frame, text="+", command=lambda: operator_var.set("+")).grid(row=0, column=0, padx=10, pady=10)
ttk.Button(operators_frame, text="-", command=lambda: operator_var.set("-")).grid(row=0, column=1, padx=10, pady=10)
ttk.Button(operators_frame, text="*", command=lambda: operator_var.set("*")).grid(row=1, column=0, padx=10, pady=10)
ttk.Button(operators_frame, text="/", command=lambda: operator_var.set("/")).grid(row=1, column=1, padx=10, pady=10)
ttk.Button(operators_frame, text="^", command=lambda: operator_var.set("^")).grid(row=2, column=0, padx=10, pady=10)
ttk.Button(operators_frame, text="М+", command=change_sign).grid(row=2, column=1, padx=10, pady=10)
ttk.Button(operators_frame, text="C", command=clear).grid(row=3, column=0, columnspan=2, padx=10, pady=10)
ttk.Button(root, text="=", command=calculate).grid(row=4, column=0, columnspan=2, pady=20)
root.mainloop()
Вы дали слишком мало времени и я не успел реализовать некоторые вещи как M+, M- а также красивое расположение графических элементов программы
Вот то что я успел накодить я изменю свой ответ, позже с улучшенной версией
import tkinter as tk
def calculate():
try:
# Получаем числа из полей ввода
num1_str = textfield1.get().strip()
num2_str = textfield2.get().strip()
if not num1_str or not num2_str:
raise ValueError("Вы ничего не ввели")
num1 = float(num1_str)
num2 = float(num2_str)
if num2 != 0:
operator = operator_var.get()
# Выполняем соответствующую операцию
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
result = num1 / num2
else:
result = ""
textfield1.delete(0, tk.END)
textfield2.delete(0, tk.END)
# Выводим результат
output.set(result)
else:
output.set("На ноль делить нельзя!")
except ValueError as e:
# Обрабатываем ошибку ввода
output.set(str(e))
def clear():
operator_var.set("")
textfield1.delete(0, tk.END)
textfield2.delete(0, tk.END)
output.set("")
# Создаем главное окно
root = tk.Tk()
root.title("Calculator")
root.configure(bg="black")
root.geometry("600x600")
# Поля ввода
textfield1 = tk.Entry(root, bg="white")
textfield2 = tk.Entry(root, bg="white")
textfield3 = tk.Entry(root, bg="white")
operator_var = tk.StringVar()
operator_var.set('+') # Устанавливаем оператор по умолчанию
# Кнопки
def substraction():
operator_var.set('-')
calculate()
def addition():
operator_var.set('+')
calculate()
def multiplication():
operator_var.set('*')
calculate()
def division():
operator_var.set('/')
calculate()
button1 = tk.Button(root, text="+", command=addition)
button2 = tk.Button(root, text="/", command=division)
button3 = tk.Button(root, text="*", command=multiplication)
button4 = tk.Button(root, text="-", command=substraction)
button5 = tk.Button(root, text="C", command=clear)
# Тексты
text1 = tk.Label(root, text="Введите числа")
text2 = tk.Label(root, text="Выберите действие")
text3 = tk.Label(root, text="Получите ответ")
# Поле вывода
output = tk.StringVar()
output_label = tk.Label(root, textvariable=output, bg="black", fg="white")
# Располагаем виджеты в окне
textfield1.grid(row=0, column=0)
textfield2.grid(row=1, column=0)
textfield3.grid(row=4, column=0)
text1.grid(row=0, column=1)
text2.grid(row=1, column=1)
text3.grid(row=2, column=1)
button1.grid(row=0, column=2)
button2.grid(row=1, column=2)
button3.grid(row=2, column=2)
button4.grid(row=3, column=2)
button5.grid(row=5, column=2)
output_label.grid(row=4, column=0, columnspan=3)
# Запускаем цикл событий
root.mainloop()