Вы можете заставить его работать так. Проблема была в том, что self.sqroot = sqrt(eval(self.s))
превращает self.sqroot
в строку. Чтобы избежать проблемы, код ниже просто хранит его во временной переменной с именем result
. Также обратите внимание, что вы также можете сделать что-то подобное с self.s
, поскольку его значение требуется только временно внутри метода.
Примечание Я также изменил ваш код, чтобы он больше соответствовал PEP 8 - Руководству по стилю для кода Python .
from Tkinter import *
from math import *
class calculator:
def __init__(self, master):
master.title("Simple Calculator")
self.display = Entry(master)
self.display.grid(columnspan=8, ipadx=60, ipady=10)
Button(master, text="sqrt", fg='white', bg='black',
command=lambda: self.sqroot(), height=1, width=10).grid(row=6, column=1)
def sqroot(self):
try:
self.s = self.display.get()
# self.sqroot = sqrt(eval(self.s))
result = sqrt(eval(self.s))
self.display.delete(0, END)
# self.display.insert(0, self.sqroot)
self.display.insert(0, result)
except:
self.display.delete(0, END)
self.display.insert(0, 'Invalid operation')
root = Tk()
calculator(root)
root.mainloop()