Home > Blockchain >  tkinter GUI Text Box is not displaying all results similar to terminal output
tkinter GUI Text Box is not displaying all results similar to terminal output

Time:09-17

I am trying to make a loan amortization table inside tkinter GUI using text box. However, all the loan amortization table is fully displayed in the terminal console as an output. The tkinter text BOX output display's only the last line: Here is the full code:

  import math
  import tkinter as tk
  from tkinter import *




def calcLoanPayment(p, r, n, t):
    if p > 0 and r > 0 and n > 0 and t > 0:
        clp = (p *(r/n)*(pow(1   r/n, n * t)))/(pow(1   r/n, n * t)-1)
               
        clp = round(clp, 2)
        return clp
    
    else:
        return -1

def runApp(): #This will bound the function runapp to the calcbtn.
    print("running")
    p = principalentry.get() #this will get value as a string

    try:
        p = float(p) #this will make  cast it to float variable.

    except:
        p = -1
    principalentry.delete(0, END) #this will clear the entry after calculation

    r = interestrateentry.get() 

    try:   #Try will help from crushing the program when wrong value entered
        r = float(r) 
    except:
        r = -1
    interestrateentry.delete(0, END) #this will clear the entry after calculation

    n = compoundintervalentry.get() #this will get value as a string

    try:
        n = int(n) #this will make  cast it to float variable.

    except:
        n = -1
    compoundintervalentry.delete(0, END) #this will clear the entry after calculation

    t = durationentry.get() 

    try:   #Try will help from crushing the program when wrong value entered
        t = int(t) 
    except:
        t = -1
    durationentry.delete(0, END) #this will clear the entry after calculation


    

    clp = calcLoanPayment(p,r,n,t)
    print(clp)
    paymentinterval = n*t
    paymentinterval = int(paymentinterval)
    startingBalance=p
    endingBalance=p
    
    for i in range(1, paymentinterval 1):
        interestcharge =r/n*startingBalance
        endingBalance=startingBalance interestcharge-clp
        result ="\t\t" str(i) "\t\t"  str(round (startingBalance, 1)
                                          ) "\t\t" str(round (interestcharge, 1)) "\t\t" str(round (clp, 1)
                                                                                              ) "\t\t" str(round (endingBalance, 1))
            
        startingBalance = endingBalance
        print(result)
        finaloutput = result

        output.config(state="normal")
        output.delete(0.0, 'end')
        output.insert(END, finaloutput)
        output.config(state="disabled")
     

   
    
    

   
    

    
#Frontend maincode Startshere:
#sketch the design of the user interface first.

root = tk.Tk()
root.config(bg="#F8B135")
root.state("zoomed")
#There are 3 steps to build event programming
#Step 1: construct the widgets
#step 2: configure the widget to make it nicer
#srep 3: place or pack the widget in the root window
title = Label(root, text = "Loan Payment Calculator", font = 'bold')
title.config(fg='white', bg="#28348A")
title.pack(fill = BOTH)

principallabel = Label(root, text="Principal: ")
principallabel.config(anchor = W, font = 'bold', bg="#F8B135")
principallabel.place(x=50, y=30)

principalentry = Entry(root)
principalentry.config(bg="#ffffff")
principalentry.place(x=400, y=30)

interestratelabel = Label(root, text="Interest Rate: enter as Decimal (eg.2% as 0.02) ")
interestratelabel.config(anchor = W, font = 'bold', bg="#F8B135")
interestratelabel.place(x=50, y=70)

interestrateentry = Entry(root)
interestrateentry.config(bg="#ffffff")
interestrateentry.place(x=400, y=70)

compoundintervallabel = Label(root, text="Compound Interval: ")
compoundintervallabel.config(anchor = W, font = 'bold', bg="#F8B135")
compoundintervallabel.place(x=50, y=110)

compoundintervalentry = Entry(root)
compoundintervalentry.config(bg="#ffffff")
compoundintervalentry.place(x=400, y=110)

durationlabel = Label(root, text="Duration: ")
durationlabel.config(anchor = W, font = 'bold', bg="#F8B135")
durationlabel.place(x=50, y=150)

durationentry = Entry(root)
durationentry.config(bg="#ffffff")
durationentry.place(x=400, y= 150)

output = Text(root)
output.config(width= 150, height = 100, bg="white", state="disabled", borderwidth=2, relief= "groove", wrap='word')

output.place(x=50, y=230)

calcbtn = Button(root, text= "Calculate", font = 'bold', highlightbackground="#3E4149")
calcbtn.config(fg='#28348A',command=runApp)
calcbtn.place(x=50, y=190)



           



root. mainloop()
file.close()`

I couldn't figure out How to display the whole output like the terminal did on the tkinter textbox output function. your help is much appreciated.

CodePudding user response:

There are 2 small changes to the code in the function runApp()

output.config(state="normal")
# output.delete(0.0, 'end') # This line deletes the last entry in the text box. Remove this
output.insert(END, finaloutput   '\n')  # Add a newline here. Generates the desired 'tabular' output
output.config(state="disabled")
  • Related