使用Python的复利GUI计算器
像Python这样的编程语言提供了许多开发图形用户界面(GUI)的选项。在所有GUI方法中,Tkinter是最常用的一种。在接下来的教程中,我们将学习使用Python编程语言中的Tkinter包创建一个简单的复利GUI计算器应用程序的方法。
但在我们开始编码部分之前,让我们简单了解一下复利以及如何使用Python计算它。
理解复利
复利是指既得的利息以及按照固定间隔复利计算的利息。在固定间隔,累积的利息与当前本金合并,然后为新本金估计利息。新本金等于初始本金和迄今累积的利息的总和。
Compound Interest = Interest on Principal + Compounded Interest at Standard Intervals
我们可以通过两个步骤来计算复利。首先,我们将通过将初始本金乘以一加上年利率的复利周期数减一来计算最终金额。对于下一个步骤,我们将从所得值中减去贷款的总初始金额。这将给我们复利或CI。
因此,为了计算年复利,我们将把贷款、投资或本金的实际金额乘以年利率。然后,我们将这个金额加到本金上,然后再次乘以利率,以得到第二年的复利。
现在,让我们用数学方式来考虑以上陈述:
其中,
- A: A 是投资/贷款的最终金额或未来价值,包括利息。
- P: P 是初始本金余额/金额。
- r: r 是年利率。
- n: n 是每单位t计算的复利计数。
- t: t 是经过的期间数。
上述公式表示了时间期间结束时的总金额,包括复利和本金。此外,我们可以通过从该金额中减去本金来估计复利。计算复利的公式如下所示:
Compound Interest (C.I.) = A - P
现在让我们用一个示例来考虑上面的数学声明。
示例:
输入值:
P = 7500
r = 5% = 5/100 = 0.05
n = 12
t = 10
如果我们将上述值代入公式,我们将得到以下结果:
因此,总金额为 ,复利为。
现在让我们考虑以下示例代码,演示了上述公式在Python中的实现:
示例:
# defining the function to calculate the compound interest
def compound_interest(principal, rate_of_interest, number, time):
# calculating the compound interest
amount = principal * pow((1 + (rate_of_interest/number)), number * time)
ci = amount - principal
# returning the resultant value
return ci
# defining the main function
def main_function():
# asking the user for input
p = float(input("Enter the Principal Amount: "))
r = float(input("Enter the Rate of Interest: "))
n = float(input("Enter the Number of times that interest is compounded per unit t: "))
t = float(input("Enter the Time Period: "))
# calling the compound_interest() function and storing the value in new variable
ci = compound_interest(p, r, n, t)
print()
# printing the result
print("Compound Interest (C.I.): %2f" %ci)
# calling the main_function() function
main_function()
输出:
Enter the Principal Amount: 7500
Enter the Rate of Interest: 0.05
Enter the Number of times that interest is compounded per unit t: 12
Enter the Time Period: 10
Compound Interest (C.I.): 4852.571233
说明:
在上面的代码片段中,我们定义了一个名为 compound_interest() 的函数,接受一些参数,如 principal , rate_of_interest , number 和 time 。我们使用上述公式计算复利的总金额,然后用总金额减去本金金额来计算复利。最后,我们将复利作为 ci 返回。
然后我们定义了另一个名为 main_function() 的函数,从用户那里获取本金、利率、时间次数和时间周期的输入,并将它们存储在变量 p , r , n 和 t 中。然后我们调用 compound_interest() 函数,提供变量的值,并将结果存储在一个新变量 ci 中。然后我们打印结果给用户。
最后,我们调用 main_function() 来执行程序。
现在,我们将修改此函数,以便与Tkinter库一起使用,为计算复利构建一个图形用户界面。
使用Tkinter创建复利GUI计算器
我们将使用以下步骤创建项目的GUI:
步骤1: 导入所需的模块。
步骤2: 然后为应用程序定义一些函数。
步骤3: 然后创建主窗口(容器)。
步骤4: 然后向主窗口添加任意数量的小部件。
现在让我们详细了解这些步骤。
导入所需的模块
首先,我们将导入Tkinter库来构建应用程序的GUI。
让我们考虑以下代码片段,示例如下:
文件:ciCalci.py
# importing the required widgets and methods from the tkinter library
from tkinter import *
解释:
以上代码片段中,我们从Tkinter库中导入了所需的小部件和方法。
定义应用程序所需的必要函数
我们将需要一些重要函数来帮助我们运行该GUI应用程序。
第一个函数将允许我们在用户按下“重置”按钮时重置用户填写的输入字段。
让我们考虑以下示例代码来演示相同的功能:
文件:ciCalci.py
# defining the reset function
def reset():
# deleting the entries in all entry fields
principalField.delete(0, END)
rateField.delete(0, END)
numberField.delete(0, END)
timeField.delete(0, END)
resultField.delete(0, END)
# setting the focus to the principal field
principalField.focus_set()
说明:
在上面的代码片段中,我们定义了一个名为 reset() 的函数。在这个函数中,我们使用 delete() 方法并指定 (0, END) 作为参数来删除所有输入字段中的条目,从而删除整个文本。然后,我们使用 focus_set() 方法将焦点设置到稍后在本教程中将定义的本金金额输入字段。
现在,我们将定义另一个函数,用于计算输入值的复利。我们将稍微修改之前的 compound_interest() 函数来实现这个函数。
以下代码片段展示了相同的内容:
文件:ciCalci.py
# defining the function to calculate the compound interest
def compound_interest():
# getting the values from the entry fields
principal = float(principalField.get())
rate_of_interest = float(rateField.get())
number = float(numberField.get())
time = float(timeField.get())
# calculating the compound interest
amount = principal * pow((1 + (rate_of_interest / (100 * number))), number * time)
ci = amount - principal
# printing the resultant value in result field
resultField.insert(10, ci)
解释:
在上面的代码片段中,我们定义了一个名为 compound_interest() 的函数。我们从输入字段中提取了值,并将其存储为不同变量中的浮点数值。然后,我们计算了输入值的复利,并将结果插入到结果输入字段中。
创建应用程序的主窗口
现在我们已成功创建了应用程序所需的函数,我们将继续处理GUI部分。我们将创建应用程序的主窗口,在该窗口中显示所有必要的小部件。
让我们考虑以下示例代码片段:
文件:ciCalci.py
# main function
if __name__ == "__main__":
# creating an instance of the Tk() class
guiWindow = Tk()
# defining the title for the GUI window
guiWindow.title("Compound Interest Calculator - javatpoint.com")
# defining the geometry for the window
guiWindow.geometry("500x500+500+250")
# disabling the resizable option
guiWindow.resizable(0, 0)
# setting the background color for the window
guiWindow.configure(bg = "#f0c33c")
解释:
在上面的代码片段中,我们定义了main函数。在这个函数中,我们创建了一个 Tk() 类的对象。然后,我们使用 title() 方法为GUI窗口定义了标题。接下来,我们使用 geometry() 方法定义了窗口的几何形状,并通过将 (0, 0) 设置为 resizable() 方法的参数来禁用可调整大小的选项。最后,我们使用 configure() 方法将应用程序的背景颜色设置为 #f0c33c 。
将小部件添加到主窗口中
现在,我们已经为项目创建了主窗口。接下来,我们将向其中添加一些小部件,以便向用户显示数据。
我们将使用 Label() 小部件在主窗口上显示标题标签。以下是演示相同的代码片段:
文件:ciCalci.py
# heading on the window
guiLabel = Label(
guiWindow,
text = "CALCULATE THE \nCOMPOUND INTEREST",
font = ("Arial", 20),
fg = "#211600",
bg = "#f0c33c"
)
# placing the label on the window
guiLabel.place(
x = 60,
y = 10
)
解释:
在上述的代码片段中,我们使用了 Label() 小部件为主窗口创建一个标签。我们指定了 guiWindow 作为其参数。我们还设置了要显示的文本以及字体样式和大小、前景色和背景色。然后,我们使用了 place() 方法将标签放置在屏幕上。
现在,让我们使用 Label() 小部件创建其他标签,以显示必要的信息,如本金、利率、次数、时间周期和复利。
以下是演示相同内容的代码片段:
文件:ciCalci.py
# creating a 'Principal Amount' label
labelOne = Label(
guiWindow,
text = "Principal Amount (Rs.):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Rate of Interest' label
labelTwo = Label(
guiWindow,
text = "Rate of Interest (%):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Number of Times' label
labelThree = Label(
guiWindow,
text = "Number of Times (n):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Time Period' label
labelFour = Label(
guiWindow,
text = "Time Period (Years):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Compound Interest' label
labelFive = Label(
guiWindow,
text = "Compound Interest (C.I.):",
bg = "#f0c33c",
fg = "#4a3200"
)
解释:
在上面的代码片段中,我们使用 Label() 小部件定义了不同的标签,指定 guiWindow 作为它们的参数,以及这些标签将显示的文本、背景和前景颜色。
现在我们已经创建了标签,是时候将它们放置在主窗口上了。
我们将使用 place() 方法,指定标签将显示的坐标。
让我们考虑以下代码片段,演示相同的功能。
文件:ciCalci.py
# using the place() method to place
# the above labels on the window
labelOne.place(x = 72, y = 120)
labelTwo.place(x = 72, y = 160)
labelThree.place(x = 72, y = 200)
labelFour.place(x = 72, y = 240)
labelFive.place(x = 72, y = 340)
解释:
在上面的代码片段中,我们在之前创建的标签上使用了 place() 方法。我们为这些标签指定了放置的x和y坐标。
现在我们将使用 Entry() 组件向主窗口添加一些输入字段,以允许用户输入计算复利所需的值。我们还将定义一个显示结果的输入字段。
让我们考虑下面显示的代码片段,它说明了同样的事情:
文件:ciCalci.py
# entry field for the principal amount
principalField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the rate of interest
rateField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the number
numberField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the time period
timeField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the result
resultField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
解释:
在上面的代码片段中,我们使用 Entry() 小部件来定义用户输入所需数据的输入字段。我们还定义了一个输入字段来显示用户的结果。
现在,让我们使用 place() 方法将这些输入字段放在主窗口上。
以下代码片段演示了同样的功能:
文件:ciCalci.py
# using the place() method to place
# the above fields on the window
principalField.place(x = 250, y = 120)
rateField.place(x = 250, y = 160)
numberField.place(x = 250, y = 200)
timeField.place(x = 250, y = 240)
resultField.place(x = 250, y = 340)
解释:
在以上的代码片段中,我们使用了 place() 方法将上述字段放置在窗口上。我们为它们的放置指定了x和y坐标。
现在我们将创建一些按钮来触发它们执行的函数。我们将使用 Button() 小部件,并将其command参数指定为我们之前定义的函数。
我们将创建两个按钮 – 第一个按钮是 计算 按钮,它将计算给定数据的复合利息。第二个按钮是 重置 按钮,它将重置所有输入和结果。
文件:ciCalci.py
# creating a Result button
resultButton = Button(
guiWindow,
text = "CALCULATE",
bg = "#135e96",
fg = "#fcf9e8",
command = compound_interest
)
# creating a Reset button
resetButton = Button(
guiWindow,
text = "RESET",
bg = "#d63638",
fg = "#fcf0f1",
command = reset
)
解释:
在上面的代码片段中,我们使用 Button() 小部件创建了 CALCULATE 和 RESET 按钮。我们使用 command 参数并将目标设置为 compound_interest() 和 reset() 函数。
现在我们已经创建了按钮,我们需要使用 place() 方法将它们放置在主窗口上。
让我们看下面的代码片段,演示了相同的操作。
文件:ciCalci.py
# using the place() method to place
# the above buttons on the window
resultButton.place(x = 280, y = 280)
resetButton.place(x = 300, y = 380)
解释:
在上面的代码片段中,我们使用了 place() 方法在指定的坐标上将上述按钮放置在主窗口上。
最后,我们将使用 mainloop() 方法运行Tkinter事件循环。以下是演示相同功能的代码片段。
文件:ciCalci.py
# running the window
guiWindow.mainloop()
说明:
在上面的代码片段中,我们使用了 mainloop() 方法来运行Tkinter事件循环。
因此,“ 复利计算器GUI ”项目的编码最终完成。我们现在可以保存文件并运行程序,看看它是否正常工作。
要运行程序,我们可以在命令行shell或终端中输入以下命令:
命令:
$ python ciCalci.py
但在我们看到输出之前,这是一个完整的项目代码。
完整项目代码
下面的程序文件是“复利GUI计算器”项目的完整代码。
文件:ciCalci.py
# importing the required widgets and methods from the tkinter library
from tkinter import *
# defining the reset function
def reset():
# deleting the entries in all entry fields
principalField.delete(0, END)
rateField.delete(0, END)
numberField.delete(0, END)
timeField.delete(0, END)
resultField.delete(0, END)
# setting the focus to the principal field
principalField.focus_set()
# defining the function to calculate the compound interest
def compound_interest():
# getting the values from the entry fields
principal = float(principalField.get())
rate_of_interest = float(rateField.get())
number = float(numberField.get())
time = float(timeField.get())
# calculating the compound interest
amount = principal * pow((1 + (rate_of_interest / (100 * number))), number * time)
ci = amount - principal
# printing the resultant value in result field
resultField.insert(10, ci)
# main function
if __name__ == "__main__":
# creating an instance of the Tk() class
guiWindow = Tk()
# defining the title for the GUI window
guiWindow.title("Compound Interest Calculator - javatpoint.com")
# defining the geometry for the window
guiWindow.geometry("500x500+500+250")
# disabling the resizable option
guiWindow.resizable(0, 0)
# setting the background color for the window
guiWindow.configure(bg = "#f0c33c")
# heading on the window
guiLabel = Label(
guiWindow,
text = "CALCULATE THE \nCOMPOUND INTEREST",
font = ("Arial", 20),
fg = "#211600",
bg = "#f0c33c"
)
# placing the label on the window
guiLabel.place(
x = 60,
y = 10
)
# creating a 'Principal Amount' label
labelOne = Label(
guiWindow,
text = "Principal Amount (Rs.):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Rate of Interest' label
labelTwo = Label(
guiWindow,
text = "Rate of Interest (%):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Number of Times' label
labelThree = Label(
guiWindow,
text = "Number of Times (n):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Time Period' label
labelFour = Label(
guiWindow,
text = "Time Period (Years):",
bg = "#f0c33c",
fg = "#4a3200"
)
# creating a 'Compound Interest' label
labelFive = Label(
guiWindow,
text = "Compound Interest (C.I.):",
bg = "#f0c33c",
fg = "#4a3200"
)
# using the place() method to place
# the above labels on the window
labelOne.place(x = 72, y = 120)
labelTwo.place(x = 72, y = 160)
labelThree.place(x = 72, y = 200)
labelFour.place(x = 72, y = 240)
labelFive.place(x = 72, y = 340)
# entry field for the principal amount
principalField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the rate of interest
rateField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the number
numberField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the time period
timeField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# entry field for the result
resultField = Entry(
guiWindow,
bg = "#fcf9e8",
fg = "#211600"
)
# using the place() method to place
# the above fields on the window
principalField.place(x = 250, y = 120)
rateField.place(x = 250, y = 160)
numberField.place(x = 250, y = 200)
timeField.place(x = 250, y = 240)
resultField.place(x = 250, y = 340)
# creating a Result button
resultButton = Button(
guiWindow,
text = "CALCULATE",
bg = "#135e96",
fg = "#fcf9e8",
command = compound_interest
)
# creating a Reset button
resetButton = Button(
guiWindow,
text = "RESET",
bg = "#d63638",
fg = "#fcf0f1",
command = reset
)
# using the place() method to place
# the above buttons on the window
resultButton.place(x = 280, y = 280)
resetButton.place(x = 300, y = 380)
# running the window
guiWindow.mainloop()
输出: