├── README.md ├── data.db └── main.py /README.md: -------------------------------------------------------------------------------- 1 | # inventory_system_python_tkinter 2 | Inventory System using Python Tkinter SQLite Database 3 | -------------------------------------------------------------------------------- /data.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzycode/inventory_system_python_tkinter/def778cb723f612aca4af77cbe945f90f6d0052d/data.db -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from tkinter import * 3 | from tkinter import ttk 4 | 5 | root = Tk() 6 | root.title("Inventory System") 7 | root.geometry("1080x720") 8 | my_tree = ttk.Treeview(root) 9 | storeName = "Inventory System" 10 | 11 | 12 | def reverse(tuples): 13 | new_tup = tuples[::-1] 14 | return new_tup 15 | 16 | 17 | def insert( id, name, price, quantity): 18 | conn = sqlite3.connect("data.db") 19 | cursor = conn.cursor() 20 | 21 | cursor.execute("""CREATE TABLE IF NOT EXISTS 22 | inventory(itemId TEXT, itemName TEXT, itemPrice TEXT, itemQuantity TEXT)""") 23 | 24 | cursor.execute("INSERT INTO inventory VALUES ('" + str(id) + "','" + str(name) + "','" + str(price) + "','" + str(quantity) + "')") 25 | conn.commit() 26 | 27 | 28 | def delete(data): 29 | conn = sqlite3.connect("data.db") 30 | cursor = conn.cursor() 31 | 32 | cursor.execute("""CREATE TABLE IF NOT EXISTS 33 | inventory(itemId TEXT, itemName TEXT, itemPrice TEXT, itemQuantity TEXT)""") 34 | 35 | cursor.execute("DELETE FROM inventory WHERE itemId = '" + str(data) + "'") 36 | conn.commit() 37 | 38 | 39 | def update(id, name, price, quantity, idName): 40 | conn = sqlite3.connect("data.db") 41 | cursor = conn.cursor() 42 | 43 | cursor.execute("""CREATE TABLE IF NOT EXISTS 44 | inventory(itemId TEXT, itemName TEXT, itemPrice TEXT, itemQuantity TEXT)""") 45 | 46 | cursor.execute("UPDATE inventory SET itemId = '" + str(id) + "', itemName = '" + str(name) + "', itemPrice = '" + str(price) + "', itemQuantity = '" + str(quantity) + "' WHERE itemId='"+str(idName)+"'") 47 | conn.commit() 48 | 49 | 50 | def read(): 51 | conn = sqlite3.connect("data.db") 52 | cursor = conn.cursor() 53 | 54 | cursor.execute("""CREATE TABLE IF NOT EXISTS 55 | inventory(itemId TEXT, itemName TEXT, itemPrice TEXT, itemQuantity TEXT)""") 56 | 57 | cursor.execute("SELECT * FROM inventory") 58 | results = cursor.fetchall() 59 | conn.commit() 60 | return results 61 | 62 | 63 | def insert_data(): 64 | itemId = str(entryId.get()) 65 | itemName = str(entryName.get()) 66 | itemPrice = str(entryPrice.get()) 67 | itemQuantity = str(entryQuantity.get()) 68 | if itemId == "" or itemName == " ": 69 | print("Error Inserting Id") 70 | if itemName == "" or itemName == " ": 71 | print("Error Inserting Name") 72 | if itemPrice == "" or itemPrice == " ": 73 | print("Error Inserting Price") 74 | if itemQuantity == "" or itemQuantity == " ": 75 | print("Error Inserting Quantity") 76 | else: 77 | insert(str(itemId), str(itemName), str(itemPrice), str(itemQuantity)) 78 | 79 | for data in my_tree.get_children(): 80 | my_tree.delete(data) 81 | 82 | for result in reverse(read()): 83 | my_tree.insert(parent='', index='end', iid=result, text="", values=(result), tag="orow") 84 | 85 | my_tree.tag_configure('orow', background='#EEEEEE') 86 | my_tree.grid(row=1, column=5, columnspan=4, rowspan=5, padx=10, pady=10) 87 | 88 | 89 | def delete_data(): 90 | selected_item = my_tree.selection()[0] 91 | deleteData = str(my_tree.item(selected_item)['values'][0]) 92 | delete(deleteData) 93 | 94 | for data in my_tree.get_children(): 95 | my_tree.delete(data) 96 | 97 | for result in reverse(read()): 98 | my_tree.insert(parent='', index='end', iid=result, text="", values=(result), tag="orow") 99 | 100 | my_tree.tag_configure('orow', background='#EEEEEE') 101 | my_tree.grid(row=1, column=5, columnspan=4, rowspan=5, padx=10, pady=10) 102 | 103 | def update_data(): 104 | selected_item = my_tree.selection()[0] 105 | update_name = my_tree.item(selected_item)['values'][0] 106 | update(entryId.get(), entryName.get(), entryPrice.get(), entryQuantity.get(), update_name) 107 | 108 | for data in my_tree.get_children(): 109 | my_tree.delete(data) 110 | 111 | for result in reverse(read()): 112 | my_tree.insert(parent='', index='end', iid=result, text="", values=(result), tag="orow") 113 | 114 | my_tree.tag_configure('orow', background='#EEEEEE') 115 | my_tree.grid(row=1, column=5, columnspan=4, rowspan=5, padx=10, pady=10) 116 | 117 | 118 | titleLabel = Label(root, text=storeName, font=('Arial bold', 30), bd=2) 119 | titleLabel.grid(row=0, column=0, columnspan=8, padx=20, pady=20) 120 | 121 | idLabel = Label(root, text="ID", font=('Arial bold', 15)) 122 | nameLabel = Label(root, text="Name", font=('Arial bold', 15)) 123 | priceLabel = Label(root, text="Price", font=('Arial bold', 15)) 124 | quantityLabel = Label(root, text="Quantity", font=('Arial bold', 15)) 125 | idLabel.grid(row=1, column=0, padx=10, pady=10) 126 | nameLabel.grid(row=2, column=0, padx=10, pady=10) 127 | priceLabel.grid(row=3, column=0, padx=10, pady=10) 128 | quantityLabel.grid(row=4, column=0, padx=10, pady=10) 129 | 130 | entryId = Entry(root, width=25, bd=5, font=('Arial bold', 15)) 131 | entryName = Entry(root, width=25, bd=5, font=('Arial bold', 15)) 132 | entryPrice = Entry(root, width=25, bd=5, font=('Arial bold', 15)) 133 | entryQuantity = Entry(root, width=25, bd=5, font=('Arial bold', 15)) 134 | entryId.grid(row=1, column=1, columnspan=3, padx=5, pady=5) 135 | entryName.grid(row=2, column=1, columnspan=3, padx=5, pady=5) 136 | entryPrice.grid(row=3, column=1, columnspan=3, padx=5, pady=5) 137 | entryQuantity.grid(row=4, column=1, columnspan=3, padx=5, pady=5) 138 | 139 | buttonEnter = Button( 140 | root, text="Enter", padx=5, pady=5, width=5, 141 | bd=3, font=('Arial', 15), bg="#0099ff", command=insert_data) 142 | buttonEnter.grid(row=5, column=1, columnspan=1) 143 | 144 | buttonUpdate = Button( 145 | root, text="Update", padx=5, pady=5, width=5, 146 | bd=3, font=('Arial', 15), bg="#ffff00", command=update_data) 147 | buttonUpdate.grid(row=5, column=2, columnspan=1) 148 | 149 | buttonDelete = Button( 150 | root, text="Delete", padx=5, pady=5, width=5, 151 | bd=3, font=('Arial', 15), bg="#e62e00", command=delete_data) 152 | buttonDelete.grid(row=5, column=3, columnspan=1) 153 | 154 | style = ttk.Style() 155 | style.configure("Treeview.Heading", font=('Arial bold', 15)) 156 | 157 | my_tree['columns'] = ("ID", "Name", "Price", "Quantity") 158 | my_tree.column("#0", width=0, stretch=NO) 159 | my_tree.column("ID", anchor=W, width=100) 160 | my_tree.column("Name", anchor=W, width=200) 161 | my_tree.column("Price", anchor=W, width=150) 162 | my_tree.column("Quantity", anchor=W, width=150) 163 | my_tree.heading("ID", text="ID", anchor=W) 164 | my_tree.heading("Name", text="Name", anchor=W) 165 | my_tree.heading("Price", text="Price", anchor=W) 166 | my_tree.heading("Quantity", text="Quantity", anchor=W) 167 | 168 | for data in my_tree.get_children(): 169 | my_tree.delete(data) 170 | 171 | for result in reverse(read()): 172 | my_tree.insert(parent='', index='end', iid=0, text="", values=(result), tag="orow") 173 | 174 | my_tree.tag_configure('orow', background='#EEEEEE', font=('Arial bold', 15)) 175 | my_tree.grid(row=1, column=5, columnspan=4, rowspan=5, padx=10, pady=10) 176 | 177 | root.mainloop() 178 | 179 | --------------------------------------------------------------------------------