Финансовый калькулятор: Как правильно сохранить кнопки ввода int N, I / Y, PMT, PV и FV, чтобы впоследствии выполнить расчет TVM с помощью Numpy? - PullRequest
1 голос
/ 15 января 2020

Так что обычные функции калькулятора работают нормально, но я пытаюсь добавить в него калькулятор стоимости денег во времени. По сути, я хочу иметь возможность нажимать число, затем сохранять его в одной из кнопок (N, I / Y, PMT, PV, FV), а затем использовать Numpy для вычисления пропущенного значения. Какие-либо предложения? Если у вас есть предложения по ресурсам, это также будет очень полезно.

from tkinter import *
import numpy as np 


operator = ""
nPeriods = ""
rate = ""

def btnClick(numbers):
    global operator
    operator = operator + str(numbers)
    text_input.set(operator)

def btnClearDisplay():
    global operator
    operator = ""
    text_input.set("")

def btnEqualsInput():
    global operator
    sumup = str(eval(operator))
    text_input.set(sumup)
    operator = ""

def btnNClick():
    global nPeriods
    global operator
    nPeriods = text_input.get() #may need to adjust
    text_input.set(nPeriods)
    operator = ""


def btnIYClick():
    global rate
    rate = int(text_input.get()) / 100 
    #text_input.set(rate)



calc = Tk()
calc.title("Calculator")

text_input = StringVar()

textDisplay = Entry(calc,font=('arial',20,'bold'), textvariable=text_input, bd=25, insertwidth=10, bg='powder blue', justify='right')
textDisplay.grid(row=0, column=0, columnspan = 4)


#========================================

btn1 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='1', bg='powder blue', command=lambda:btnClick(1))
btn1.grid(row=1,column=0)

btn2 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='2', bg='powder blue', command=lambda:btnClick(2))
btn2.grid(row=1,column=1)

btn3 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='3', bg='powder blue', command=lambda:btnClick(3))
btn3.grid(row=1,column=2)

addition = Button(calc, padx=18, pady=20, fg="black", font=('arial',20,'bold'), text='+', bg='powder blue', command=lambda:btnClick('+'))
addition.grid(row=1,column=3)

#========================================

btn4 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='4', bg='powder blue', command=lambda:btnClick(4))
btn4.grid(row=2,column=0)

btn5 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='5', bg='powder blue', command=lambda:btnClick(5))
btn5.grid(row=2,column=1)

btn6 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='6', bg='powder blue', command=lambda:btnClick(6))
btn6.grid(row=2,column=2)

subtraction = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='-', bg='powder blue', command=lambda:btnClick('-'))
subtraction.grid(row=2,column=3)

#========================================
btn7 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='7', bg='powder blue', command=lambda:btnClick(7))
btn7.grid(row=3,column=0)

btn8 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='8', bg='powder blue', command=lambda:btnClick(8))
btn8.grid(row=3,column=1)

btn9 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='9', bg='powder blue', command=lambda:btnClick(9))
btn9.grid(row=3,column=2)

multiply = Button(calc, padx=19, pady=20, fg="black", font=('arial',20,'bold'), text='*', bg='powder blue', command=lambda:btnClick('*'))
multiply.grid(row=3,column=3)


#========================================
btn0 = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='0', bg='powder blue', command=lambda:btnClick(0))
btn0.grid(row=4,column=0)

btnClear = Button(calc, padx=18.5, pady=20, fg="black", font=('arial',20,'bold'), text='C', bg='powder blue', command=btnClearDisplay)
btnClear.grid(row=4,column=1)

btnEquals = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='=', bg='powder blue', command=btnEqualsInput)
btnEquals.grid(row=4,column=2)

divide = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='/', bg='powder blue', command=lambda:btnClick('/'))
divide.grid(row=4,column=3)

#==========================================
btnN = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='N', bg='powder blue', command=btnNClick)
btnN.grid(row=5,column=0)

btnIY = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='I/Y', bg='powder blue', command=btnIYClick)
btnIY.grid(row=5,column=1)

btnPV = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='PV', bg='powder blue', command=lambda:btnClick(3))
btnPV.grid(row=5,column=2)

btnPMT = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='PMT', bg='powder blue', command=lambda:btnClick(1))
btnPMT.grid(row=6,column=0)

btnFV = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='FV', bg='powder blue', command=lambda:btnClick(2))
btnFV.grid(row=6,column=1)

btnCPT = Button(calc, padx=20, pady=20, fg="black", font=('arial',20,'bold'), text='CPT', bg='powder blue', command=lambda:btnClick(3))
btnCPT.grid(row=6,column=2)



calc.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...