tkinter GUI 文本框未显示类似于终端输出的所有结果

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

我正在尝试使用文本框在 tkinter GUI 内进行贷款摊销 table。但是,所有贷款摊销 table 作为输出完全显示在终端控制台中。 tkinter 文本框输出仅显示最后一行:这是完整代码:

  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()`

我不知道如何像终端在 tkinter 文本框输出功能上那样显示整个输出。非常感谢您的帮助。

函数中的代码有 2 个小改动 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")