Tkinter

Tkinter is the most commonly used library for developing GUI (Graphical User Interface) in Python.

Tkinter Overview

Tkinter is the most commonly used library for developing GUI (Graphical User Interface) in Python. It is a standard Python interface to the Tk GUI toolkit shipped with Python.

Python - Loan caculator using Tkinter

Step #1: Create the main window.

def __init__(self):
    # Create a window
    window = Tk()
    window.title("Loan Calculator") # Set title

    # create the input boxes.
    Label(window, text = "Annual Interest Rate").grid(row = 1,
                                       column = 1, sticky = W)
    Label(window, text = "Number of Years").grid(row = 2,
                                  column = 1, sticky = W)
    Label(window, text = "Loan Amount").grid(row = 3,
                              column = 1, sticky = W)
    Label(window, text = "Monthly Payment").grid(row = 4,
                                  column = 1, sticky = W)
    Label(window, text = "Total Payment").grid(row = 5,
                                column = 1, sticky = W)

    # for taking inputs
    self.annualInterestRateVar = StringVar()
    Entry(window, textvariable = self.annualInterestRateVar,
                 justify = RIGHT).grid(row = 1, column = 2)

    self.numberOfYearsVar = StringVar()
    Entry(window, textvariable = self.numberOfYearsVar,
            justify = RIGHT).grid(row = 2, column = 2)

    self.loanAmountVar = StringVar()
    Entry(window, textvariable = self.loanAmountVar,
         justify = RIGHT).grid(row = 3, column = 2)

    self.monthlyPaymentVar = StringVar()
    lblMonthlyPayment = Label(window, textvariable =
                self.monthlyPaymentVar).grid(row = 4,
                column = 2, sticky = E)

    self.totalPaymentVar = StringVar()
    lblTotalPayment = Label(window, textvariable =
                self.totalPaymentVar).grid(row = 5,
                column = 2, sticky = E)

    # create the button
    btComputePayment = Button(window, text = "Compute Payment",
                           command = self.computePayment).grid(
                               row = 6, column = 2, sticky = E)
    # Create an event loop
    window.mainloop()

Step #2: Adding functionality.

def computePayment(self):
    # compute the total payment.
    monthlyPayment = self.getMonthlyPayment(float(self.loanAmountVar.get()),
                    float(self.annualInterestRateVar.get()) / 1200,
                    int(self.numberOfYearsVar.get()))

    self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f'))
    totalPayment = float(self.monthlyPaymentVar.get()) * 12 \
                           * int(self.numberOfYearsVar.get())
    self.totalPaymentVar.set(format(totalPayment, '10.2f'))

# compute the monthly payment.
def getMonthlyPayment(self, loanAmount, monthlyInterestRate, numberOfYears):
    monthlyPayment = loanAmount * monthlyInterestRate / (1- 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12))
    return monthlyPayment;
def computePayment(self):
    # compute the total payment.
    monthlyPayment = self.getMonthlyPayment(float(self.loanAmountVar.get()),
                    float(self.annualInterestRateVar.get()) / 1200,
                    int(self.numberOfYearsVar.get()))

    self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f'))
    totalPayment = float(self.monthlyPaymentVar.get()) * 12 \
                           * int(self.numberOfYearsVar.get())
    self.totalPaymentVar.set(format(totalPayment, '10.2f'))

...\> REM compute the monthly payment.
def getMonthlyPayment(self, loanAmount, monthlyInterestRate, numberOfYears):
    monthlyPayment = loanAmount * monthlyInterestRate / (1- 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12))
    return monthlyPayment;

Step #3: Complete program.

# Import tkinter
from tkinter import *
class LoanCalculator:

    def __init__(self):

        window = Tk() # Create a window
        window.title("Loan Calculator") # Set title
        # create the input boxes.
        Label(window, text = "Annual Interest Rate").grid(row = 1,
                                        column = 1, sticky = W)
        Label(window, text = "Number of Years").grid(row = 2,
                                    column = 1, sticky = W)
        Label(window, text = "Loan Amount").grid(row = 3,
                                column = 1, sticky = W)
        Label(window, text = "Monthly Payment").grid(row = 4,
                                    column = 1, sticky = W)
        Label(window, text = "Total Payment").grid(row = 5,
                                    column = 1, sticky = W)

        # for taking inputs
        self.annualInterestRateVar = StringVar()
        Entry(window, textvariable = self.annualInterestRateVar,
                    justify = RIGHT).grid(row = 1, column = 2)
        self.numberOfYearsVar = StringVar()

        Entry(window, textvariable = self.numberOfYearsVar,
                justify = RIGHT).grid(row = 2, column = 2)
        self.loanAmountVar = StringVar()

        Entry(window, textvariable = self.loanAmountVar,
            justify = RIGHT).grid(row = 3, column = 2)
        self.monthlyPaymentVar = StringVar()
        lblMonthlyPayment = Label(window, textvariable =
                        self.monthlyPaymentVar).grid(row = 4,
                        column = 2, sticky = E)

        self.totalPaymentVar = StringVar()
        lblTotalPayment = Label(window, textvariable =
                    self.totalPaymentVar).grid(row = 5,
                    column = 2, sticky = E)

        # create the button
        btComputePayment = Button(window, text = "Compute Payment",
                                command = self.computePayment).grid(
                                row = 6, column = 2, sticky = E)
        window.mainloop() # Create an event loop


    # compute the total payment.
    def computePayment(self):

        monthlyPayment = self.getMonthlyPayment(
        float(self.loanAmountVar.get()),
        float(self.annualInterestRateVar.get()) / 1200,
        int(self.numberOfYearsVar.get()))

        self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f'))
        totalPayment = float(self.monthlyPaymentVar.get()) * 12 \
                                * int(self.numberOfYearsVar.get())

        self.totalPaymentVar.set(format(totalPayment, '10.2f'))

    def getMonthlyPayment(self, loanAmount, monthlyInterestRate, numberOfYears):
        # compute the monthly payment.
        monthlyPayment = loanAmount * monthlyInterestRate / (1
        - 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12))
        return monthlyPayment;
        root = Tk() # create the widget

# call the class to run the program.
LoanCalculator()
...\> REM Import tkinter
from tkinter import *
class LoanCalculator:

    def __init__(self):

        window = Tk() # Create a window
        window.title("Loan Calculator") # Set title
        # create the input boxes.
        Label(window, text = "Annual Interest Rate").grid(row = 1,
                                        column = 1, sticky = W)
        Label(window, text = "Number of Years").grid(row = 2,
                                    column = 1, sticky = W)
        Label(window, text = "Loan Amount").grid(row = 3,
                                column = 1, sticky = W)
        Label(window, text = "Monthly Payment").grid(row = 4,
                                    column = 1, sticky = W)
        Label(window, text = "Total Payment").grid(row = 5,
                                    column = 1, sticky = W)

        # for taking inputs
        self.annualInterestRateVar = StringVar()
        Entry(window, textvariable = self.annualInterestRateVar,
                    justify = RIGHT).grid(row = 1, column = 2)
        self.numberOfYearsVar = StringVar()

        Entry(window, textvariable = self.numberOfYearsVar,
                justify = RIGHT).grid(row = 2, column = 2)
        self.loanAmountVar = StringVar()

        Entry(window, textvariable = self.loanAmountVar,
            justify = RIGHT).grid(row = 3, column = 2)
        self.monthlyPaymentVar = StringVar()
        lblMonthlyPayment = Label(window, textvariable =
                        self.monthlyPaymentVar).grid(row = 4,
                        column = 2, sticky = E)

        self.totalPaymentVar = StringVar()
        lblTotalPayment = Label(window, textvariable =
                    self.totalPaymentVar).grid(row = 5,
                    column = 2, sticky = E)

        # create the button
        btComputePayment = Button(window, text = "Compute Payment",
                                command = self.computePayment).grid(
                                row = 6, column = 2, sticky = E)
        window.mainloop() # Create an event loop


    # compute the total payment.
    def computePayment(self):

        monthlyPayment = self.getMonthlyPayment(
        float(self.loanAmountVar.get()),
        float(self.annualInterestRateVar.get()) / 1200,
        int(self.numberOfYearsVar.get()))

        self.monthlyPaymentVar.set(format(monthlyPayment, '10.2f'))
        totalPayment = float(self.monthlyPaymentVar.get()) * 12 \
                                * int(self.numberOfYearsVar.get())

        self.totalPaymentVar.set(format(totalPayment, '10.2f'))

    def getMonthlyPayment(self, loanAmount, monthlyInterestRate, numberOfYears):
        # compute the monthly payment.
        monthlyPayment = loanAmount * monthlyInterestRate / (1
        - 1 / (1 + monthlyInterestRate) ** (numberOfYears * 12))
        return monthlyPayment;
        root = Tk() # create the widget

...\> REM call the class to run the program.
LoanCalculator()

Step #4: Run program.

$ python3 LoanCalculator.py
...\> py LoanCalculator.py

Now, we explain this:

Loan Calculator