Создание Графического Интерфейса для Управления Базой Данных на Python

В этом руководстве мы создадим приложение с графическим интерфейсом, которое позволит управлять базой данных книг с помощью Python и библиотеки Tkinter. Пользователи смогут добавлять, удалять и искать книги в базе данных, используя удобный графический интерфейс.

Импорт Необходимых Библиотек

Сначала импортируем необходимые модули:

import sqlite3
import tkinter as tk
from tkinter import messagebox

Класс для Работы с Базой Данных

Определим класс LibraryDatabase для взаимодействия с базой данных.

class LibraryDatabase:
    def __init__(self, db_name):
        self.conn = sqlite3.connect(db_name)
        self.cursor = self.conn.cursor()

        # Создание таблицы, если не существует
        self.cursor.execute('''
            CREATE TABLE IF NOT EXISTS books (
                id INTEGER PRIMARY KEY,
                title TEXT,
                author TEXT,
                year INTEGER
            )
        ''')
        self.conn.commit()

    def add_book(self, title, author, year):
        """Добавление книги в базу данных"""
        self.cursor.execute("INSERT INTO books (title, author, year) VALUES (?, ?, ?)", (title, author, year))
        self.conn.commit()

    def remove_book(self, title):
        """Удаление книги из базы данных по названию"""
        self.cursor.execute("DELETE FROM books WHERE title=?", (title,))
        self.conn.commit()

    def search_books(self, keyword):
        """Поиск книг по ключевому слову"""
        self.cursor.execute("SELECT * FROM books WHERE title LIKE ? OR author LIKE ?", ("%" + keyword + "%", "%" + keyword + "%"))
        return self.cursor.fetchall()

    def close(self):
        """Закрытие соединения с базой данных"""
        self.conn.close()

Класс для Графического Интерфейса

Теперь создадим класс LibraryApp, который будет представлять графический интерфейс.

class LibraryApp:
    def __init__(self, root, db):
        self.root = root
        self.db = db
        self.root.title("Библиотека Книг")

        # Создание виджетов
        self.title_label = tk.Label(root, text="Название:")
        self.title_entry = tk.Entry(root)
        self.author_label = tk.Label(root, text="Автор:")
        self.author_entry = tk.Entry(root)
        self.year_label = tk.Label(root, text="Год издания:")
        self.year_entry = tk.Entry(root)
        self.add_button = tk.Button(root, text="Добавить", command=self.add_book)
        self.remove_button = tk.Button(root, text="Удалить", command=self.remove_book)
        self.search_label = tk.Label(root, text="Поиск:")
        self.search_entry = tk.Entry(root)
        self.search_button = tk.Button(root, text="Искать", command=self.search_books)
        self.result_label = tk.Label(root, text="")

        # Размещение виджетов
        self.title_label.grid(row=0, column=0)
        self.title_entry.grid(row=0, column=1)
        self.author_label.grid(row=1, column=0)
        self.author_entry.grid(row=1, column=1)
        self.year_label.grid(row=2, column=0)
        self.year_entry.grid(row=2, column=1)
        self.add_button.grid(row=3, column=0, columnspan=2)
        self.remove_button.grid(row=4, column=0)
        self.search_label.grid(row=4, column=1)
        self.search_entry.grid(row=4, column=2)
        self.search_button.grid(row=4, column=3)
        self.result_label.grid(row=5, columnspan=4)

    def add_book(self):
        title = self.title_entry.get()
        author = self.author_entry.get()
        year = self.year_entry.get()
        if title and author and year:
            self.db.add_book(title, author, year)
            self.clear_entries()
            self.result_label.config(text="Книга добавлена.")
        else:
            messagebox.showerror("Ошибка", "Пожалуйста, заполните все поля.")

    def remove_book(self):
        title = self.title_entry.get()
        if title:
            self.db.remove_book(title)
            self.clear_entries()
            self.result_label.config(text="Книга удалена.")
        else:
            messagebox.showerror("Ошибка", "Пожалуйста, введите название книги для удаления.")

    def search_books(self):
        keyword = self.search_entry.get()
        if keyword:
            results = self.db.search_books(keyword)
            self.display_results(results)
        else:
            messagebox.showinfo("Информация", "Введите ключевое слово для поиска.")

    def display_results(self, results):
        self.result_label.config(text="Результаты поиска:")
        for row in results:
            self.result_label.config(text=self.result_label.cget("text") + f"\nID: {row[0]}, Название: {row[1]}, Автор: {row[2]}, Год: {row[3]}")

    def clear_entries(self):
        self.title_entry.delete(0, tk.END)
        self.author_entry.delete(0, tk.END)
        self.year_entry.delete(0, tk.END)

Основная Программа

В основной программе мы создадим объект базы данных и запустим графический интерфейс.

def main():
    db = LibraryDatabase('library.db')
    root = tk.Tk()
    app = LibraryApp(root, db)
    root.mainloop()

if __name__ == "__main__":
    main()

Запуск Приложения

Запустите программу, и вы увидите графический интерфейс, позволяющий управлять базой данных книг. Пользователи могут добавлять книги, удалять их и искать по названию или автору. Результаты поиска отображаются в окне приложения.

Этот пример демонстрирует, как можно создать удобный графический интерфейс для работы с базой данных на Python. Библиотека Tkinter позволяет разработчикам создавать приложения с визуальным представлением, что упрощает взаимодействие с пользователем.