Я сейчас работаю над базовой программой калькулятора. Я пытаюсь использовать функцию проверки, чтобы пользователь мог вводить только значения из списка valild_input
. Функция test_input
, содержащая этот список, работает нормально, пока я не решу набрать "=" или нажать equals button
. Когда я нажимаю equals_button
, текущее уравнение в записи display
не удаляется и заменяется результатом. Хотя этого не происходит, когда я нажимаю клавишу «=» на клавиатуре. Единственная проблема заключается в том, что знак равенства остается на display
, и после этого виджет ввода вообще прекращает проверять введенные пользователем данные.
from tkinter import *
from tkinter import messagebox
def replace_text(text):
display.delete(0, END)
display.insert(0, text)
#Calculates the input in the display
def calculate(event = None):
equation = display.get()
try:
result = eval(equation)
replace_text(result)
except:
messagebox.showerror("Error", "Math Error", parent = root)
def test_input(value, action):
valid_input = ["7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "/"]
if action == "1":
if value not in valid_input:
return False
return True
root = Tk()
root.title("Calculator testing")
display = Entry(root, font=("Helvetica", 16), justify = "right", validate = "key")
display.configure(validatecommand = (display.register(test_input), "%S", "%d"))
display.insert(0, "")
display.grid(column = 0, row = 0, columnspan = 4, sticky = "NSWE", padx = 10, pady = 10)
display.bind("=", calculate)
#Equals button
button_equal = Button(root, font = ("Helvetica", 14), text = "=", command =
calculate, bg = "#c0ded9")
button_equal.grid(column = 2, row = 1, columnspan = 2, sticky = "WE")
#All clear button
button_clear = Button(root, font = ("Helvetica", 14), text = "AC", command = lambda: replace_text(""), bg = "#c0ded9")
button_clear.grid(column = 0, row = 1, columnspan = 2, sticky = "WE")
#Main Program
root.mainloop()