import sqlite3
from tkinter import Tk, Label, Entry, Button, ttk, messagebox
# Database setup
def setup_database():
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS books (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
author TEXT NOT NULL,
status TEXT NOT NULL
)
""")
conn.commit()
conn.close()
# Add book
def add_book(title, author, status):
if not title or not author or not status:
messagebox.showerror("Error", "All fields are required.")
return
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO books (title, author, status) VALUES (?, ?, ?)", (title, author, status))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Book added successfully!")
refresh_list()
# Get books
def get_books():
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("SELECT id, title, author, status FROM books")
books = cursor.fetchall()
conn.close()
return books
# Update book status
def update_status(book_id, new_status):
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("UPDATE books SET status = ? WHERE id = ?", (new_status, book_id))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Book status updated successfully!")
refresh_list()
# Delete book
def delete_book(book_id):
conn = sqlite3.connect('books.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM books WHERE id = ?", (book_id,))
conn.commit()
conn.close()
messagebox.showinfo("Success", "Book deleted successfully!")
refresh_list()
# Refresh the book list in the GUI
def refresh_list():
for row in tree.get_children():
tree.delete(row)
books = get_books()
for book in books:
tree.insert("", "end", values=book)
# GUI setup
def setup_gui():
global tree
root = Tk()
root.title("Book Tracker")
# Labels and input fields
Label(root, text="Title:").grid(row=0, column=0, padx=5, pady=5)
title_entry = Entry(root)
title_entry.grid(row=0, column=1, padx=5, pady=5)
Label(root, text="Author:").grid(row=1, column=0, padx=5, pady=5)
author_entry = Entry(root)
author_entry.grid(row=1, column=1, padx=5, pady=5)
Label(root, text="Status:").grid(row=2, column=0, padx=5, pady=5)
status_combobox = ttk.Combobox(root, values=["To Read", "Reading", "Finished"])
status_combobox.grid(row=2, column=1, padx=5, pady=5)
# Buttons
Button(root, text="Add Book", command=lambda: add_book(title_entry.get(), author_entry.get(), status_combobox.get())).grid(row=3, column=0, columnspan=2, pady=10)
# Book list
columns = ("ID", "Title", "Author", "Status")
tree = ttk.Treeview(root, columns=columns, show="headings")
for col in columns:
tree.heading(col, text=col)
tree.column(col, width=150)
tree.grid(row=4, column=0, columnspan=2, padx=5, pady=5)
# Actions
Button(root, text="Update Status", command=lambda: update_status(tree.item(tree.focus())['values'][0], status_combobox.get())).grid(row=5, column=0, pady=10)
Button(root, text="Delete Book", command=lambda: delete_book(tree.item(tree.focus())['values'][0])).grid(row=5, column=1, pady=10)
refresh_list()
root.mainloop()
if __name__ == "__main__":
setup_database()
setup_gui()
No comments:
Post a Comment