Sales Management App

import tkinter as tk

from tkinter import messagebox

import sqlite3

root_window = tk.Tk()

root_window.title("Sales Management App")

root_window.geometry("720x750")

name_entry_text = tk.StringVar()

id_entry_text = tk.StringVar()

quantity_sold_entry_text = tk.StringVar()

quantity_left_entry_text = tk.StringVar()

price_entry_text = tk.StringVar()

today_sales_quantity_entry_text = tk.StringVar()

today_sales_total_price_entry_text = tk.StringVar()

week_sales_quantity_entry_text = tk.StringVar()

week_sales_total_price_entry_text = tk.StringVar()

month_sales_quantity_entry_text = tk.StringVar()

month_sales_total_price_entry_text = tk.StringVar()

delete_entry = tk.StringVar()

name_entry = tk.Entry(root_window, textvariable=name_entry_text)

id_entry = tk.Entry(root_window, textvariable=id_entry_text)

quantity_sold_entry = tk.Entry(root_window, textvariable=quantity_sold_entry_text)

quantity_left_entry = tk.Entry(root_window, textvariable=quantity_left_entry_text)

price_entry = tk.Entry(root_window, textvariable=price_entry_text)

today_sales_quantity_entry = tk.Entry(root_window, textvariable=today_sales_quantity_entry_text)

today_sales_total_price_entry = tk.Entry(root_window, textvariable=today_sales_total_price_entry_text)

week_sales_quantity_entry = tk.Entry(root_window, textvariable=week_sales_quantity_entry_text)

week_sales_total_price_entry = tk.Entry(root_window, textvariable=week_sales_total_price_entry_text)

month_sales_quantity_entry = tk.Entry(root_window, textvariable=month_sales_quantity_entry_text)

month_sales_total_price_entry = tk.Entry(root_window, textvariable=month_sales_total_price_entry_text)

delete_entry = tk.Entry(root_window, textvariable=delete_entry, width=20)

delete_entry.grid(row=6, column=3, padx=10, columnspan=3, rowspan=2)

delete_entry.insert(0, 'Enter id to delete')

name_label = tk.Label(root_window, text="Product name")

id_label = tk.Label(root_window, text="Product ID")

quantity_sold_label = tk.Label(root_window, text="Quantity sold")

quantity_left_label = tk.Label(root_window, text="Quantity left")

price_label = tk.Label(root_window, text="Price")

today_sales_quantity_label = tk.Label(root_window, text="Today's Sales(quantity)")

today_sales_total_price_label = tk.Label(root_window, text="Today's Sales(Total Price)")

week_sales_quantity_label = tk.Label(root_window, text="Week Sales(quantity)")

week_sales_total_price_label = tk.Label(root_window, text="Week Sales(Total Price)")

month_sales_quantity_label = tk.Label(root_window, text="Month Sales(quantity)")

month_sales_total_price_label = tk.Label(root_window, text="Month Sales(Total Price)")

product_list_label = tk.Label(root_window, text='Product List', font=(30), borderwidth=1, relief="solid", width=50)

product_list_label.grid(row=12, column=0, columnspan=50, pady=20)

pdt_name = tk.Label(root_window, text='Product Name', borderwidth=1, relief="solid")

pdt_id = tk.Label(root_window, text='Product ID', borderwidth=1, relief="solid")

pdt_price = tk.Label(root_window, text='Product Price', borderwidth=1, relief="solid")

pdt_sales_quantity = tk.Label(root_window, text="Today's Sales(Quantity)", borderwidth=1, relief="solid")

def Refresh():

    conn = sqlite3.connect('database.db')

    cursor = conn.cursor()

    cursor.execute("CREATE TABLE IF NOT EXISTS products (name TEXT, id TEXT PRIMARY KEY, quantitySold TEXT, quantityLeft TEXT, price TEXT, todaySalesQuantity TEXT, todaySalesTotalPrice TEXT, weekSalesQuantity TEXT, weekSalesTotalPrice TEXT, monthSalesQuantity TEXT, monthSalesTotalPrice TEXT)")

    cursor.execute('SELECT * FROM products')

    products = cursor.fetchall()

    for i in range(len(products)):

        tk.Label(root_window, text=products[i][0]).grid(row=i+14, column=0)

        tk.Label(root_window, text=products[i][1]).grid(row=i+14, column=1)

        tk.Label(root_window, text=products[i][4]).grid(row=i+14, column=2)

        tk.Label(root_window, text=products[i][5]).grid(row=i+14, column=3)

    conn.close()

def show_message(title, message):

    messagebox.showerror(title, message)

def add_product():

    try:

        conn = sqlite3.connect("database.db")

        cursor = conn.cursor()

        cursor.execute("INSERT INTO products (name, id, quantitySold, quantityLeft, price, todaySalesQuantity, todaySalesTotalPrice, weekSalesQuantity, weekSalesTotalPrice, monthSalesQuantity, monthSalesTotalPrice) VALUES (?, ?, ?, ?,?,?,?,?,?,?,?)", (str(name_entry_text.get()), str(id_entry_text.get()), str(quantity_sold_entry_text.get()), str(quantity_left_entry_text.get()), str(price_entry_text.get()), str(today_sales_quantity_entry_text.get()), str(today_sales_total_price_entry_text.get()), str(week_sales_quantity_entry_text.get()), str(week_sales_total_price_entry_text.get()), str(month_sales_quantity_entry_text.get()), str(month_sales_total_price_entry_text.get())))

        conn.commit()

    except sqlite3.Error as e:

        show_message('Sqlite error', e)

    finally:

        Refresh()

        conn.close()

def delete_product():

    try:

        conn = sqlite3.connect("database.db")

        cursor = conn.cursor()

        cursor.execute('SELECT * FROM products')

        cursor.execute("DELETE FROM products WHERE id = ?", (str(delete_entry.get())))

        conn.commit()

        show_message('Success', 'Product deleted')

        conn.close()

        Refresh()

    except sqlite3.Error as e:

        show_message('Sqlite error', e)

    finally:

        conn.close()

        Refresh()

def update():

    price = price_entry_text.get()

    quantity_sold = quantity_sold_entry_text.get()

    quantity_left = quantity_left_entry_text.get()

    today_sales_quantity = today_sales_quantity_entry_text.get()

    week_sales_quantity = week_sales_quantity_entry_text.get()

    month_sales_quantity = month_sales_quantity_entry_text.get()

    if len(price) < 1 or len(quantity_sold) < 1 or len(quantity_left) < 1 or len(today_sales_quantity) < 1 or len(week_sales_quantity) < 1 or len(month_sales_quantity) < 1:

        show_message('Python error!', 'Please enter values for all fields')

        return

    try:

        price = int(price)

        quantity_sold = int(quantity_sold)

        quantity_left = int(quantity_left)

        today_sales_quantity = int(today_sales_quantity)

        week_sales_quantity = int(week_sales_quantity)

        month_sales_quantity = int(month_sales_quantity)

        conn = sqlite3.connect('database.db')

        c = conn.cursor()

        c.execute("UPDATE products SET name=?, id=?, quantitySold=?, quantityLeft=?, price=?, todaySalesQuantity=?, todaySalesTotalPrice=?, weekSalesQuantity=?, weekSalesTotalPrice=?, monthSalesQuantity=?, monthSalesTotalPrice=?  WHERE id=?", (str(name_entry_text.get()), str(id_entry_text.get()), str(quantity_sold_entry_text.get()), str(quantity_left_entry_text.get()), str(price_entry_text.get()), str(today_sales_quantity_entry_text.get()), str(today_sales_total_price_entry_text.get()), str(week_sales_quantity_entry_text.get()), str(week_sales_total_price_entry_text.get()), str(month_sales_quantity_entry_text.get()), str(month_sales_total_price_entry_text.get()), str(id_entry_text.get())))

        conn.commit()

        Refresh()

        show_message('Success', 'Product updated')

        conn.close()

    except sqlite3.Error as e:

        show_message('Sqlite error', e)

    finally:

        Refresh()

        conn.close()

def calculate():

    price = price_entry_text.get()

    quantity_sold = quantity_sold_entry_text.get()

    quantity_left = quantity_left_entry_text.get()

    today_sales_quantity = today_sales_quantity_entry_text.get()

    week_sales_quantity = week_sales_quantity_entry_text.get()

    month_sales_quantity = month_sales_quantity_entry_text.get()

    if len(price) < 1 or len(quantity_sold) < 1 or len(quantity_left) < 1 or len(today_sales_quantity) < 1 or len(week_sales_quantity) < 1 or len(month_sales_quantity) < 1:

        show_message('Python error!', 'Please enter values for all fields')

        return

    try:

        price = int(price)

        quantity_sold = int(quantity_sold)

        quantity_left = int(quantity_left)

        today_sales_quantity = int(today_sales_quantity)

        week_sales_quantity = int(week_sales_quantity)

        month_sales_quantity = int(month_sales_quantity)

    except:

        show_message('Python error!', 'Please enter integer values in these fields-> Price, Today Sales(Quantity), Week Sales(Quantity), Month Sales(Quantity)')

        return

    today_sales_total_price = price * today_sales_quantity

    week_sales_total_price = price * week_sales_quantity

    month_sales_total_price = price * month_sales_quantity


    today_sales_total_price_entry_text.set(today_sales_total_price)

    week_sales_total_price_entry_text.set(week_sales_total_price)

    month_sales_total_price_entry_text.set(month_sales_total_price)

    add_button.config(state='normal')

Refresh()

update_button = tk.Button(text='UPDATE', width=20, height=2, command=update)

delete_button = tk.Button(text='DELETE', width=20,height=2, command=delete_product)

add_button = tk.Button(text='ADD', width=20, height=2, command=add_product)

add_button.config(state='disabled')

calculate_button = tk.Button(text='Verify And Calculate Prices', width=25, height=2, command=calculate)

refresh_button = tk.Button(text='Refresh Table', width=25, height=2, command=Refresh)

name_label.grid(row=0, column=0, padx=10, pady=10, sticky='w')

id_label.grid(row=1, column=0, padx=10, pady=10, sticky='w')

quantity_sold_label.grid(row=2, column=0, padx=10, pady=10, sticky='w')

quantity_left_label.grid(row=3, column=0, padx=10, pady=10, sticky='w')

price_label.grid(row=4, column=0, padx=10, pady=10, sticky='w')

today_sales_quantity_label.grid(row=5, column=0, padx=10, pady=10, sticky='w')

today_sales_total_price_label.grid(row=6, column=0, padx=10, pady=10, sticky='w')

week_sales_quantity_label.grid(row=7, column=0, padx=10, pady=10, sticky='w')

week_sales_total_price_label.grid(row=8, column=0, padx=10, pady=10, sticky='w')

month_sales_quantity_label.grid(row=9, column=0, padx=10, pady=10, sticky='w')

month_sales_total_price_label.grid(row=10, column=0, padx=10, pady=10, sticky='w')

name_entry.grid(row=0, column=1, padx=10, pady=10, sticky='w')

id_entry.grid(row=1, column=1, padx=10, pady=10, sticky='w')

quantity_sold_entry.grid(row=2, column=1, padx=10, pady=10, sticky='w')

quantity_left_entry.grid(row=3, column=1, padx=10, pady=10, sticky='w')

price_entry.grid(row=4, column=1, padx=10, pady=10, sticky='w')

today_sales_quantity_entry.grid(row=5, column=1, padx=10, pady=10, sticky='w')

today_sales_total_price_entry.grid(row=6, column=1, padx=10, pady=10, sticky='w')

today_sales_total_price_entry.config(state='disabled')

week_sales_quantity_entry.grid(row=7, column=1, padx=10, pady=10, sticky='w')

week_sales_total_price_entry.grid(row=8, column=1, padx=10, pady=10, sticky='w')

week_sales_total_price_entry.config(state='disabled')

month_sales_quantity_entry.grid(row=9, column=1, padx=10, pady=10, sticky='w')

month_sales_total_price_entry.grid(row=10, column=1, padx=10, pady=10, sticky='w')

month_sales_total_price_entry.config(state='disabled')

update_button.grid(row=3, column=2, rowspan=2, padx=15)

delete_button.grid(row=6, column=2, rowspan=2, padx=15)

calculate_button.grid(row=11, column=0, columnspan=2)

add_button.grid(row=11, column=2)

refresh_button.grid(row=11, column=3)

pdt_name.grid(row=13, column=0)

pdt_id.grid(row=13, column=1)

pdt_price.grid(row=13, column=2)

pdt_sales_quantity.grid(row=13, column=3)

root_window.mainloop()

App For Download File from URL

from tkinter import *

from tkinter import messagebox

from PIL import ImageTk, Image

import tkinter.font as font

import requests

import re

import validators

import os

from urllib.parse import urlparse

root = Tk()

root.title("Download File from URL")

icon = PhotoImage(file='image.png')

root.iconphoto(False, icon)

root.minsize(600, 500)

root.maxsize(600, 500)

HEIGHT = 500

WIDTH = 500

FONT = font.Font(family="Comic Sans MS", size="10", weight="bold")

canvas = Canvas(root, height=HEIGHT, width=WIDTH)

canvas.pack()

background_image = ImageTk.PhotoImage(

    Image.open(r"image.jpg"))

background_label = Label(root, image=background_image)

background_label.place(relwidth=1, relheight=1)

frame = Frame(root, bg="yellow", bd=5)

frame.place(relx=0.5, rely=0.1, relwidth=0.80, relheight=0.25, anchor="n")

label_up = Label(frame)

label_up.place(relwidth=1, relheight=1)

label1 = Label(frame, text="Enter the URL", font=FONT, bd=5,

               bg="#fc034e", highlightbackground="#d9138a", fg="black")

label1.place(relx=0.1, rely=0.1, relwidth=0.25, relheight=0.25)

label2 = Label(frame, text="Enter Filename", font=FONT, bd=5,

               bg="#fc034e", highlightbackground="#d9138a", fg="black")

label2.place(relx=0.1, rely=0.64, relwidth=0.25, relheight=0.25)

entry1 = Entry(frame, font=FONT, fg="#001a4d")

entry1.place(relx=0.54, rely=0.1, relwidth=0.4, relheight=0.25)

entry2 = Entry(frame, font=FONT, fg="#001a4d")

entry2.place(relx=0.54, rely=0.64, relwidth=0.4, relheight=0.25)

def download(url, name):

    valid = validators.url(url)

    if (valid != True):

        messagebox.showerror("Invalid URL", "URL is invalid")

    elif (url == ""):

        messagebox.showerror("No valid URL", "URL cannot be empty")

    else:

        response = requests.get(url, allow_redirects=True)

        rhead = response.headers['Content-Type']

        if (canbedownloaded(rhead)):

            if (name == ""):

                a = urlparse(url)

                name = os.path.basename(a.path)

            file_data = rhead.split('/')

            ext = file_data[1]

            filename = name+'.'+ext

            open(filename, "wb").write(response.content)

            label_down['text'] = f"Your file {filename}\n has been downloaded successfully."

        else:

            label_down['text'] = "This file is invalid. It can not be downloaded."

def canbedownloaded(rhead):

    if 'text' in rhead.lower():

        return False

    if 'html' in rhead.lower():

        return False

    return True

def clear():

    entry1.delete(0, END)

    entry2.delete(0, END)

    label_down['text'] = ""

button1 = Button(root, text="DOWNLOAD", font=FONT, bg="pink", fg="black", activeforeground="pink",

                 activebackground="black", command=lambda: download(entry1.get(), entry2.get()))

button1.place(relx=0.25, rely=0.4, relwidth=0.19, relheight=0.07)

button2 = Button(root, text="CLEAR", font=FONT, bg="pink", fg="black",

                 activeforeground="pink", activebackground="black", command=clear)

button2.place(relx=0.55, rely=0.4, relwidth=0.19, relheight=0.07)

lower_frame = Frame(root, bg="yellow", bd=10)

lower_frame.place(relx=0.5, rely=0.53, relwidth=0.8,

                  relheight=0.25, anchor="n")

label_down = Label(lower_frame, font=FONT, fg="#001a4d",

                   anchor="nw", justify="left", bd=4)

label_down.place(relwidth=1, relheight=1)

root.mainloop()

Loan Managing App

import sqlite3

from tkinter import *

from tkinter import ttk, messagebox

class LoanManager:

    def __init__(self, root):

        self.root = root

        self.root.title("Loan Managing app")

        self.root.geometry("1350x720+0+0")

        title = Label(self.root, text="Loan Managing App", font=(

            "Comic Sans MS", 20, ), bd=8,  bg='black', fg='white')

        title.pack(side=TOP, fill=X)

        self.LoanId = StringVar()

        self.name = StringVar()

        self.mob = StringVar()

        self.aadhar = StringVar()

        self.add = StringVar()

        self.pin = StringVar()

        self.amount = StringVar()

        self.year = StringVar()

        self.rate = StringVar()

        self.mpay = StringVar()

        self.tpay = StringVar()

        Detail_F = Frame(self.root, bd=4, relief=RIDGE, bg='light blue')

        Detail_F.place(x=10, y=90, width=520, height=620)

        lbl_id = Label(Detail_F, text="Loan Id", font=("Comic Sans MS", 12, ))

        lbl_id.grid(row=0, column=0, pady=10, padx=20, sticky="w")

        txt_id = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                       bd=3,  textvariable=self.LoanId)

        txt_id.grid(row=0, column=1, pady=10, sticky="w")

        lbl_name = Label(Detail_F, text="Full Name",

                         font=("Comic Sans MS", 12, ))

        lbl_name.grid(row=1, column=0, pady=10, padx=20, sticky="w")

        txt_name = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                         bd=3,  textvariable=self.name)

        txt_name.grid(row=1, column=1, pady=10, sticky="w")

        lbl_mob = Label(Detail_F, text="Mobile No.",

                        font=("Comic Sans MS", 12, ))

        lbl_mob.grid(row=2, column=0, pady=10, padx=20, sticky="w")

        txt_mob = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                        bd=3,  textvariable=self.mob)

        txt_mob.grid(row=2, column=1, pady=10, sticky="w")

        lbl_aa = Label(Detail_F, text="Aadhar No.",

                       font=("Comic Sans MS", 12, ))

        lbl_aa.grid(row=3, column=0, pady=10, padx=20, sticky="w")

        txt_aa = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                       bd=3,  textvariable=self.aadhar)

        txt_aa.grid(row=3, column=1, pady=10, sticky="w")

        lbl_add = Label(Detail_F, text="Address", font=("Comic Sans MS", 12, ))

        lbl_add.grid(row=4, column=0, pady=10, padx=20, sticky="w")

        txt_add = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                        bd=3,  textvariable=self.add)

        txt_add.grid(row=4, column=1, pady=10, sticky="w")

        lbl_pin = Label(Detail_F, text="PinCode", font=("Comic Sans MS", 12, ))

        lbl_pin.grid(row=5, column=0, pady=10, padx=20, sticky="w")

        txt_pin = Entry(Detail_F, font=("Comic Sans MS", 10, ),

                        bd=3,  textvariable=self.pin)

        txt_pin.grid(row=5, column=1, pady=10, sticky="w")

        lbl_amount = Label(Detail_F, text="Amount of Loan",

                           font=("Comic Sans MS", 12, ))

        lbl_amount.grid(row=6, column=0, pady=10, padx=20, sticky="w")

        txt_amount = Entry(Detail_F, font=(

            "Comic Sans MS", 10, ), bd=3,  textvariable=self.amount)

        txt_amount.grid(row=6, column=1, pady=10, sticky="w")

        lbl_time = Label(Detail_F, text="Number of years",

                         font=("Comic Sans MS", 12, ))

        lbl_time.grid(row=7, column=0, pady=10, padx=20, sticky="w")

        txt_time = Entry(Detail_F, font=("Comic Sans MS", 10,

                                         ), bd=3,  textvariable=self.year)

        txt_time.grid(row=7, column=1, pady=10, sticky="w")

        lbl_rate = Label(Detail_F, text="Interest Rate",

                         font=("Comic Sans MS", 12, ))

        lbl_rate.grid(row=8, column=0, pady=10, padx=20, sticky="w")

        txt_rate = Entry(Detail_F, font=("Comic Sans MS", 10,

                                         ), bd=3,  textvariable=self.rate)

        txt_rate.grid(row=8, column=1, pady=10, sticky="w")

        lbl_Mp = Label(Detail_F, text="Monthly Payment",

                       font=("Comic Sans MS", 12, ))

        lbl_Mp.grid(row=9, column=0, pady=10, padx=20, sticky="w")

        txt_Mp = Label(Detail_F, font=("Comic Sans MS", 10, ),

                       bd=3,  state=DISABLED, textvariable=self.mpay)

        txt_Mp.grid(row=9, column=1, pady=10, sticky="w")

        lbl_tp = Label(Detail_F, text="Total Payment",

                       font=("Comic Sans MS", 12, ))

        lbl_tp.grid(row=10, column=0, pady=10, padx=20, sticky="w")

        txt_tp = Label(Detail_F, font=("Comic Sans MS", 10, ),

                       bd=3,  state=DISABLED, textvariable=self.tpay)

        txt_tp.grid(row=10, column=1, pady=10, sticky="w")

        recordFrame = Frame(self.root, bd=5, relief=RIDGE)

        recordFrame.place(x=535, y=100, width=810, height=530)


        yscroll = Scrollbar(recordFrame, orient=VERTICAL)

        self.employee_table = ttk.Treeview(recordFrame, columns=(

            "empId", "name", "years", "rate", "Mpayment", "Tpayment", "mobile"), yscrollcommand=yscroll.set)

        yscroll.pack(side=RIGHT, fill=Y)

        yscroll.config(command=self.employee_table.yview)

        self.employee_table.heading("empId", text="customer Id")

        self.employee_table.heading("name", text="Name")

        self.employee_table.heading("years", text="Number of Years")

        self.employee_table.heading("rate", text="Interest Rate")

        self.employee_table.heading("Mpayment", text="Monthly Payment")

        self.employee_table.heading("Tpayment", text="Total Payment")

        self.employee_table.heading("mobile", text="Mobile No.")

        self.employee_table['show'] = 'headings'

        self.employee_table.column("empId", width=100)

        self.employee_table.column("name", width=100)

        self.employee_table.column("years", width=100)

        self.employee_table.column("rate", width=100)

        self.employee_table.column("Mpayment", width=110)

        self.employee_table.column("Tpayment", width=100)

        self.employee_table.column("mobile", width=100)

        self.employee_table.pack(fill=BOTH, expand=1)

        self.fetch_data()

        self.employee_table.bind("<ButtonRelease-1>", self.get_cursor)

        btnFrame = Frame(self.root, bd=5, relief=RIDGE)

        btnFrame.place(x=700, y=630, width=480, height=60)

        btn1 = Button(btnFrame, text='Add record', font='arial 12 bold',

                      bg='black', fg='white', width=9, command=self.addrecord)

        btn1.grid(row=0, column=0, padx=10, pady=10)

        btn2 = Button(btnFrame, text='Update', font='arial 12 bold',

                      bg='black', fg='white', width=9, command=self.update)

        btn2.grid(row=0, column=1, padx=8, pady=10)

        btn3 = Button(btnFrame, text='Delete', font='arial 12 bold',

                      bg='black', fg='white', width=9, command=self.delete)

        btn3.grid(row=0, column=2, padx=8, pady=10)

        btn4 = Button(btnFrame, text='Reset', font='arial 12 bold',

                      bg='black', fg='white', width=9, command=self.reset)

        btn4.grid(row=0, column=3, padx=8, pady=10)

    def total(self):

        p = int(self.amount.get())

        r = int(self.rate.get())

        n = int(self.year.get())

        t = (p*r*n*10)/100

        m = (p+t)/(n*10)

        self.mpay.set(str(round(m, 2)))

        self.tpay.set(str(t+p))

    def addrecord(self):

        if self.LoanId.get() == '' or self.name.get() == '' or self.mob.get() == '' or self.aadhar.get() == '' or self.add.get() == '' or self.pin.get() == '':

            messagebox.showerror('Error', 'Please enter details ?')

        else:

            self.total()

            con = sqlite3.connect('loanDetails.db')

            cur = con.cursor()

            cur.execute("Select * from customer")

            rows = cur.fetchall()

            for row in rows:

                if row[0] == self.LoanId.get():

                    messagebox.showerror(

                        'Error', 'Duplicates not allowed')

                    return

            cur.execute("insert into customer values(?,?,?,?,?,?,?,?,?,?,?)", (

                self.LoanId.get(),

                self.name.get(),

                self.mob.get(),

                self.aadhar.get(),

                self.add.get(),

                self.pin.get(),

                self.amount.get(),

                self.year.get(),

                self.rate.get(),

                self.mpay.get(),

                self.tpay.get(),

            ))

            con.commit()

            self.fetch_data()

            con.close()

    def fetch_data(self):

        con = sqlite3.connect('loanDetails.db')

        cur = con.cursor()

        cur.execute("select Loan_Id , Name , Year , Rate , Monthly_Payment , Total_Payment , MobileNumber , AadharNumber , Address , Pincode , Amount from customer")

        rows = cur.fetchall()

        if len(rows) != 0:

            self.employee_table.delete(*self.employee_table.get_children())

            for row in rows:

                self.employee_table.insert('', END, values=row)

        con.commit()

        con.close()

    def update(self):

        if self.LoanId.get() == '':

            messagebox.showerror('Error', 'Select a record to update !')

        else:

            self.total()

            con = sqlite3.connect('loanDetails.db')

            cur = con.cursor()

            cur.execute("update customer set Name = ?, MobileNumber = ?, AadharNumber = ?, Address = ?, Pincode = ?, Amount = ?, Year = ?, Rate = ?, Total_Payment = ?, Monthly_Payment = ? where Loan_Id = ?", (

                self.name.get(),

                self.mob.get(),

                self.aadhar.get(),

                self.add.get(),

                self.pin.get(),

                self.amount.get(),

                self.year.get(),

                self.rate.get(),

                self.tpay.get(),

                self.mpay.get(),

                self.LoanId.get()

            ))

            messagebox.showinfo(

                'Info', f'Record {self.LoanId.get()} Updated Successfully')

            con.commit()

            con.close()

            self.fetch_data()

            self.reset()

    def delete(self):

        if self.LoanId.get() == '':

            messagebox.showerror(

                'Error', 'Enter customer ID to delete the records')

        else:

            con = sqlite3.connect('loanDetails.db')

            cur = con.cursor()

            cur.execute("delete from customer where Loan_Id = ?",

                        (self.LoanId.get(),))

            con.commit()

            con.close()

            self.fetch_data()

            self.reset()

    def reset(self):

        self.LoanId.set('')

        self.name.set('')

        self.mob.set('')

        self.aadhar.set('')

        self.add.set('')

        self.pin.set('')

        self.amount.set('')

        self.year.set('')

        self.rate.set('')

        self.mpay.set('')

        self.tpay.set('')

    def get_cursor(self, ev):

        cursor_row = self.employee_table.focus()

        content = self.employee_table.item(cursor_row)

        row = content['values']

        self.LoanId.set(row[0])

        self.name.set(row[1])

        self.year.set(row[2])

        self.rate.set(row[3])

        self.mpay.set(row[4])

        self.tpay.set(row[5])

        self.mob.set(row[6])

        self.aadhar.set(row[7])

        self.add.set(row[8])

        self.pin.set(row[9])

        self.amount.set(row[10])

class Login():

    def __init__(self, root):

        self.root = root

        self.root.title("Loan Managing app")

        self.username = StringVar()

        self.password = StringVar()

        Label(self.root, text="Username:").grid(

            row=0, column=0, padx=10, pady=10)

        Entry(self.root, textvariable=self.username).grid(

            row=0, column=1, padx=10, pady=10)

        Label(self.root, text="Password:").grid(

            row=1, column=0, padx=10, pady=10)

        Entry(self.root, textvariable=self.password,

              show="*").grid(row=1, column=1, padx=10, pady=10)

        Button(self.root, text="Login", command=self.login).grid(

            row=2, column=1, padx=10, pady=10)

    def login(self):

        if self.username.get() == "root" and self.password.get() == "root":

            root.destroy()

            nroot = Tk()

            LoanManager(nroot)

        else:

            messagebox.showerror("Error", "Invalid username or password")

con = sqlite3.connect('loanDetails.db')

cur = con.cursor()

cur.execute('create table if not exists customer(Loan_Id varchar(20) primary key,Name varchar(20),MobileNumber varchar(20),AadharNumber varchar(20),Address varchar(20),Pincode varchar(20),Amount varchar(20),Year varchar(20),Rate varchar(20),Monthly_Payment varchar(20),Total_Payment varchar(20))')

root = Tk()

obj = Login(root)

root.mainloop()

Watermark on images

import cv2

import numpy as np

import glob

import os

from numpy._distributor_init import filename

logo = cv2.imread("logo.jpg")

h_logo, w_logo, _ = logo.shape

images_path = glob.glob("flowers/*.*")

print("Adding watermark")

for img_path in images_path:

    img = cv2.imread(img_path)

    h_img, w_img, _ = img.shape

    center_y = int(h_img / 2)

    center_x = int(w_img / 2)

    top_y = center_y - int(h_logo / 2)

    left_x = center_x - int(w_logo / 2)

    bottom_y = top_y + h_logo

    right_x = left_x + w_logo

      roi = img[top_y:bottom_y, left_x:right_x]

    result = cv2.addWeighted(roi, 1, logo, 0.3, 0)

    img[top_y:bottom_y, left_x:right_x] = result

    filename= os.path.basename(img_path)

    cv2.imwrite("watermarked_images/watermarked_" + filename, img)

print("Watermark added to all images") 

Document checker

import hashlib

from difflib import SequenceMatcher

def hash_file(fileName1, fileName2):

    h2 = hashlib.sha1()

with open(fileName1, "rb") as file:

chunk = 0

while chunk != b'':

chunk = file.read(1024)

h1.update(chunk)

with open(fileName2, "rb") as file:

chunk = 0

while chunk != b'':

chunk = file.read(1024)

h2.update(chunk)

return h1.hexdigest(), h2.hexdigest()

msg1, msg2 = hash_file("pd1.pdf ", "pd1.pdf")

if(msg1 != msg2):

print("These files are not identical")

else:

print("These files are identical")