В этом руководстве мы создадим приложение с графическим интерфейсом, которое позволит управлять базой данных книг с помощью 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 позволяет разработчикам создавать приложения с визуальным представлением, что упрощает взаимодействие с пользователем.