python复利计算小程序_带GUI界面,可以直接使用

本文介绍了一个使用Python和Tkinter库编写的复利计算工具,用户可以输入本金、利率和投资年限,程序实时计算每年的总金额和利息。更新版本中,通过多线程优化了程序启动速度。还提供了打包成exe文件的方法以便于部署。
摘要由CSDN通过智能技术生成

目录

环境的配置

功能的描述

代码内容

运行逻辑

完整代码

运行结果

exe文件

程序的迭代


环境的配置

需要使用到的库(Python自带,无需安装新的库):

import tkinter as tk

功能的描述

        使用Python编写的基于Tkinter库的图形用户界面(GUI)程序,其主要功能是实现一个复利计算工具。用户可以通过这个工具输入本金、年化利率、每月追加本金以及投资年数,然后程序会计算并展示每年的投资总金额和每年的总利息。

代码内容

运行逻辑

  1. 初始化界面:程序首先创建了一个主窗口,并设置了窗口的标题、大小以及不可调整大小的属性。同时,定义了字体大小和一些默认的输入值。

  2. 创建控件:程序创建了多个控件,包括标签、输入框和按钮。每个控件都通过place方法放置在窗口的指定位置。

    • 标签用于显示需要输入的信息,如“本金(元)”、“每月追加本金(元)”、“年化利率(%)”和“年数”。
    • 输入框允许用户输入相应的数值,每个输入框都预设了默认值。
    • 按钮用于触发计算过程。
  3. 计算逻辑:当用户点击“计算”按钮时,程序会调用calculate函数。

    • 首先,程序从输入框中获取用户输入的本金、年化利率、每月追加本金和投资年数,并将它们转换为相应的数据类型(浮点数或整数)。
    • 然后,程序初始化总本金和利息变量,并清空结果文本框。
    • 接下来,程序进入一个循环,模拟每天的复利过程。在每一天结束时,计算当天的利息并将其加到本金上。
    • 每月底,程序会将每月追加的本金加到总本金上,并输出每月的总金额。
    • 每年底,程序会将当年的总金额和总利息输出到结果文本框中,并禁用文本框的写入状态以防止重复写入。
  4. 输出结果:计算完成后,用户可以在结果文本框中看到每年的投资总金额和每年的总利息。这些信息以文本形式展示,便于用户查看和理解。

完整代码

import tkinter as tk

# 定义计算函数
def calculate():
    principal = float(principal_entry.get())  # 获取输入的本金金额并转为浮点数
    annual_rate = float(rate_entry.get())  # 获取输入的年化利率并转为浮点数
    monthly_addition = float(addition_entry.get())  # 获取输入的每月追加本金并转为浮点数
    years = int(years_entry.get())  # 获取输入的年数并转为整数
    
    total_principal = principal  # 总本金初始值等于本金
    time = 0
    interest1 = 0
    
    result_text.delete(1.0, tk.END)  # 清空结果文本框
    
    while time < 365 * years:  # 在年数范围内循环
        time += 1  # 时间加一天
        rate_per_day = annual_rate / 365 / 100  # 计算每天的利率
        interest = principal * rate_per_day  # 计算当天的利息
        principal += interest  # 计算当天的本金总额
        interest1 = interest1 + interest  # 计算本年度总利息
        
        if time % 30 == 0:  # 如果是一个月的最后一天
            principal += monthly_addition  # 加上每月追加的本金
            total_principal += monthly_addition  # 总本金也要加上每月追加的部分
            print(f"第{time//30}个月总金额:{principal:.2f}元")  # 输出每月总金额

        if time % 365 == 0:  # 如果是一年的最后一天
            result_text.config(state=tk.NORMAL)  # 开启结果文本框写入状态
            result_text.insert(tk.END, f"第{time//365}年总金额:{principal/10000:.2f}万元,当年总利息为{interest1:.1f}元\n")
            result_text.config(state=tk.DISABLED)  # 关闭结果文本框写入状态
            interest1 = 0

# 创建主窗口
root = tk.Tk()
root.title("复利计算工具")
window_width = 600
window_height = 450
root.geometry(f"{window_width}x{window_height}")
font_size = 14
root.resizable(False, False)  # 设置窗口大小不可调整

# 创建标签、输入框和按钮等控件
principal_label = tk.Label(root, text="本金(元):", font=("楷体", font_size))
principal_label.place(x=40, y=10)

principal_entry = tk.Entry(root)
principal_default_value = "30000"
principal_entry.insert(0, principal_default_value)  # 设置默认值
principal_entry.place(x=210, y=10)

addition_label = tk.Label(root, text="每月追加本金(元):", font=("楷体", font_size))
addition_label.place(x=40, y=40)

addition_entry = tk.Entry(root)
default_addition_value = "5000"
addition_entry.insert(0, default_addition_value)  # 设置默认值
addition_entry.place(x=210, y=40)

rate_label = tk.Label(root, text="年化利率(%):", font=("楷体", font_size))
rate_label.place(x=40, y=70)

rate_entry = tk.Entry(root)
default_rate_value = "5"
rate_entry.insert(0, default_rate_value)  # 设置默认值
rate_entry.place(x=210, y=70)

years_label = tk.Label(root, text="年数:", font=("楷体", font_size))
years_label.place(x=40, y=100)

years_entry = tk.Entry(root)
default_years_value = "2"
years_entry.insert(0, default_years_value)  # 设置默认值
years_entry.place(x=210, y=100)

calculate_button = tk.Button(root, text="计算", font=("楷体", font_size), command=calculate)
calculate_button.place(x=400, y=90)

result_text = tk.Text(root, height=16, width=50, font=("楷体", font_size))
result_text.place(x=40, y=130)

root.mainloop()

运行结果

exe文件

已打包完成exe文件上传:python写的复利计算小程序资源-CSDN文库

打包方法:在Vscode中将python打包为exe,超级简单,还能自定义exe的logo-CSDN博客

-------------------------------------------------------------------------------------------------------------------------------

程序的迭代

更新:2024/03/28

打开exe文件时发现启动的太慢了。故优化程序。

这个程序将在一个新线程中创建GUI界面,并在另一个线程中执行计算任务,以避免在打开程序时或计算过程中出现延迟。

import tkinter as tk
from threading import Thread

# 定义计算函数
def calculate(result_text_widget, principal_entry, rate_entry, addition_entry, years_entry):
    principal = float(principal_entry.get())  # 获取输入的本金金额并转为浮点数
    annual_rate = float(rate_entry.get()) / 100.0  # 获取输入的年化利率并转为小数形式
    monthly_addition = float(addition_entry.get())  # 获取输入的每月追加本金并转为浮点数
    years = int(years_entry.get())  # 获取输入的年数并转为整数
    
    total_principal = principal  # 总本金初始值等于本金
    time = 0
    interest1 = 0
    
    result_text_widget.delete(1.0, tk.END)  # 清空结果文本框
    
    while time < 365 * years:  # 在年数范围内循环
        time += 1  # 时间加一天
        rate_per_day = annual_rate / 365  # 计算每天的利率
        interest = total_principal * rate_per_day  # 计算当天的利息
        total_principal += interest  # 计算当天的本金总额
        interest1 += interest  # 计算本年度总利息
        
        if time % 30 == 0:  # 如果是一个月的最后一天
            total_principal += monthly_addition  # 加上每月追加的本金
        
        if time % 365 == 0:  # 如果是一年的最后一天
            result_text_widget.config(state=tk.NORMAL)  # 开启结果文本框写入状态
            result_text_widget.insert(tk.END, f"第{time//365}年总金额:{total_principal/10000:.2f}万元,当年总利息为{interest1:.1f}元\n")
            result_text_widget.config(state=tk.DISABLED)  # 关闭结果文本框写入状态
            interest1 = 0

# 定义GUI界面创建函数
def create_gui():
    # 创建主窗口
    root = tk.Tk()
    root.title("复利计算工具")
    root.geometry("600x450")
    root.resizable(False, False)

    # 创建标签、输入框和按钮等控件
    principal_label = tk.Label(root, text="本金(元):", font=("楷体", 14))
    principal_label.place(x=40, y=10)

    principal_entry = tk.Entry(root, width=20, font=("楷体", 14))
    principal_entry.insert(0, "30000")
    principal_entry.place(x=210, y=10)

    rate_label = tk.Label(root, text="年化利率(%):", font=("楷体", 14))
    rate_label.place(x=40, y=70)

    rate_entry = tk.Entry(root, width=20, font=("楷体", 14))
    rate_entry.insert(0, "5")
    rate_entry.place(x=210, y=70)

    addition_label = tk.Label(root, text="每月追加本金(元):", font=("楷体", 14))
    addition_label.place(x=40, y=40)

    addition_entry = tk.Entry(root, width=20, font=("楷体", 14))
    addition_entry.insert(0, "5000")
    addition_entry.place(x=210, y=40)

    years_label = tk.Label(root, text="年数:", font=("楷体", 14))
    years_label.place(x=40, y=100)

    years_entry = tk.Entry(root, width=20, font=("楷体", 14))
    years_entry.insert(0, "2")
    years_entry.place(x=210, y=100)

    result_text = tk.Text(root, height=16, width=50, font=("楷体", 14))
    result_text.place(x=40, y=130)
    result_text.config(state=tk.DISABLED)

    calculate_button = tk.Button(root, text="计算", font=("楷体", 14), command=lambda: Thread(target=calculate, args=(result_text, principal_entry, rate_entry, addition_entry, years_entry)).start())
    calculate_button.place(x=420, y=90)

    root.mainloop()

# 启动GUI界面
if __name__ == "__main__":
    gui_thread = Thread(target=create_gui)
    gui_thread.start()

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千城千景

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值