tkinter GUI Text控件无法像终端一样完整显示贷款摊销表结果求助
问题根因
你代码中Text控件只显示最后一行的核心问题出在runApp函数的for循环逻辑里:
- 每次循环迭代时都会执行
output.delete(0.0, 'end'),直接清空了Text控件中之前写入的所有内容,每插入一行就清一次,最终只剩最后一次循环插入的内容 - 单条摊销数据的字符串末尾没有加换行符
\n,即使不清空内容也会出现所有数据挤在同一行的问题
修复方案
你只需要修改runApp函数中for循环前后的逻辑即可,修改后的对应代码如下:
def runApp(): print("running") p = principalentry.get() try: p = float(p) except: p = -1 principalentry.delete(0, END) r = interestrateentry.get() try: r = float(r) except: r = -1 interestrateentry.delete(0, END) n = compoundintervalentry.get() try: n = int(n) except: n = -1 compoundintervalentry.delete(0, END) t = durationentry.get() try: t = int(t) except: t = -1 durationentry.delete(0, END) clp = calcLoanPayment(p,r,n,t) print(clp) paymentinterval = n*t paymentinterval = int(paymentinterval) startingBalance=p endingBalance=p # 计算前仅清空一次Text控件,开启编辑权限 output.config(state="normal") output.delete(0.0, 'end') # 可选:插入表头,方便查看字段含义 output.insert(END, "\t\t期数\t\t期初余额\t\t利息\t\t月供\t\t期末余额\n") 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)) + "\n" startingBalance = endingBalance print(result) # 直接追加内容即可,不用重复清空 output.insert(END, result) # 所有内容插入完成后再关闭编辑权限 output.config(state="disabled")
另外你代码末尾多余的file.close()可以直接删除,你全程没有打开过文件,这行代码没有实际作用还可能抛出异常。
内容的提问来源于stack exchange,提问作者henoker
相关产品推荐
相关产品推荐

