Следуйте этому руководству, чтобы узнать, как создать базовое приложение для управления данными с простым интерфейсом графического интерфейса.
Система выдачи книг — очень удобный способ для библиотекарей управлять инвентаризацией и выдачей книг. Это простое приложение идеально подходит для небольших и крупных библиотек, общественных центров, книжных клубов и даже для вашей личной коллекции книг.
Написав образец приложения, вы узнаете, как создать кросс-платформенное приложение с графическим интерфейсом, как использовать классы и объекты для моделирования сущностей и как модульно разделить свои программы.
Установка Tkinter и создание экрана входа/регистрации пользователя
Чтобы создать систему заимствования книг, вы будете использовать Tkinter. Tkinter — это стандартная библиотека графического интерфейса для настольных приложений Python. Чтобы установить его, введите в терминале:
pip install tkinter
Вы можете найти весь исходный код построения системы выдачи книг для библиотек в этом Репозиторий GitHub.
Импортируйте необходимые модули и определите класс, КнигаЗаимствованияСистема. Определите метод конструктора для класса и инициализируйте корневое окно, установив заголовок, размеры и цвет фона приложения. Определите два списка, книги и ленд_лист, которые вы будете использовать для хранения названий книг, которые люди позаимствовали.
Определить словарь, записывать, который можно использовать для обновления статуса книг. Использовать setup_gui() метод для создания графического пользовательского интерфейса и инициализации пустого списка, библиотекари, который вы будете использовать для хранения учетных данных.
import tkinter as tk
from tkinter import messagebox
classBookBorrowingSystem:
def__init__(self):
self.master = tk.Tk()
self.master.title("Book Borrowing System")
self.master.geometry("750x600")
self.master.config(bg='#708090')
self.books = []
self.lend_list = []
self.record = {}
self.setup_gui()
self.librarians = []
Определите метод, setup_gui(). Для экрана регистрации/входа вы создадите три ярлыка с именами логин_метка, username_label, и метка_пароля. Для каждой метки определите родительский элемент, в который вы хотите ее поместить, текст, который она должна отображать, стиль шрифта, который она должна иметь, а также цвет шрифта.
Наряду с метками вам нужно создать два виджета ввода с именами username_entry и password_entry для получения и хранения учетных данных библиотекаря. Вы можете построить средство проверки пароля для проверки безопасности вашего пароля с помощью Python. Использовать пакет менеджер, чтобы упорядочить все эти виджеты и добавить соответствующие отступы для визуальной привлекательности.
defsetup_gui(self):
self.login_label = tk.Label(self.master, text="Book Borrowing System", font=("Helvetica", 24), bg='#708090', fg='white')
self.login_label.pack(pady=(30, 10))
self.login_button = tk.Button(self.master, text="Login", command=self.login, font=("Helvetica", 14))
self.login_button.pack(pady=10)
# Similarly, create the username_label, username_entry, password_label,
# password_entry, and the register button
Определите метод, авторизоваться(). Использовать получать() в виджете ввода, чтобы извлечь значение учетных данных, введенных библиотекарем. Переберите список библиотекарей и проверьте, соответствуют ли имя пользователя и пароль введенным значениям. Если да, очистите введенные значения от начала до конца. Уничтожьте все созданные вами виджеты и вызовите book_management_screen() способ отображения экрана управления системой заимствования книг.
В противном случае учетные данные для входа неверны или библиотекарь не зарегистрирован. Отобразите соответствующее сообщение через виджет окна сообщений Tkinter. Если вы хотите зашифруйте свой пароль, установите модуль bcrypt.
deflogin(self):
username = self.username_entry.get()
password = self.password_entry.get()for librarian in self.librarians:
if username == librarian[0] and password == librarian[1]:
self.username_entry.delete(0, tk.END)
self.password_entry.delete(0, tk.END)
self.login_label.destroy()# Destroy all the entries, labels, and buttons
self.book_management_screen()
return
messagebox.showerror("Error", "Invalid username or password. Please register if not done already.")
Определите метод, регистр(). Извлеките значение учетных данных, которые вводит библиотекарь, добавьте их в список библиотекаря и полностью удалите записи.
defregister(self):
username = self.username_entry.get()
password = self.password_entry.get()
self.librarians.append([username, password])
self.username_entry.delete(0, tk.END)
self.password_entry.delete(0, tk.END)
Определите метод, book_management_screen(). Создайте четыре ярлыка с именами add_book_label, return_book_label, remove_book_label, и issue_book_label. Создайте четыре записи и четыре кнопки, соответствующие этим ярлыкам, и еще одну кнопку для просмотра списка всех книг вместе с их статусом. Используйте менеджер пакетов, чтобы упорядочить элементы и добавить отступы.
defbook_management_screen(self):
self.add_book_label = tk.Label(self.master, text="Add Book", font=("Helvetica", 18), bg='#708090', fg='white')
self.add_book_label.pack(pady=(20, 5))
self.add_book_entry = tk.Entry(self.master, font=("Helvetica", 14))
self.add_book_entry.pack()
self.add_book_button = tk.Button(self.master, text="Add Book", command=self.add_book, font=("Helvetica", 14))
self.add_book_button.pack(pady=5)# Repeat the same for return_book, remove_book, issue_book
self.view_books_button = tk.Button(self.master, text="View Books", command=self.view_books, font=("Helvetica", 14))
self.view_books_button.pack(pady=10)
Построение функциональности системы заимствования книг
Определите метод, add_book(). Извлеките содержимое виджета записи и добавьте его в список книг. В словаре записей добавьте ключ как название книги, а значение как добавлен. Отображение окна сообщения об успешном завершении программы, сообщающего об успешном добавлении книги. Очистите содержимое add_book_entry от начала до конца.
defadd_book(self):
book = self.add_book_entry.get()
self.books.append(book)
self.record[book] = "added"
messagebox.showinfo("Success", "Book added successfully")
self.add_book_entry.delete(0, tk.END)
Определите метод, удалить_книгу(). Извлеките название книги и проверьте, присутствует ли оно в книги список. Если он существует, удалите его и его запись из словаря. После этого отобразите окно сообщения об успешном завершении, информирующее о том, что программа удалила книгу. В противном случае отобразите окно сообщения об ошибке, в котором говорится, что книга не найдена. Очистите запись remove_book_entry полностью.
defremove_book(self):
book = self.remove_book_entry.get()if book in self.books:
self.books.remove(book)if book in self.record:
del self.record[book]messagebox.showinfo("Success", "Book removed successfully")
else:
messagebox.showerror("Error", "Book not found")
self.remove_book_entry.delete(0, tk.END)
Определите метод, issue_book(). Извлеките название книги и проверьте, существует ли оно в книги список. Если да, добавьте это в ленд_лист список и удалить его из списка книг. Обновите значение книги как изданный. В противном случае отобразите окно сообщения об ошибке, в котором говорится, что книга не найдена. Очистите содержимое issue_book_entry().
defissue_book(self):
book = self.issue_book_entry.get()if book in self.books:
self.lend_list.append(book)
self.books.remove(book)
self.record[book] = "issued"
messagebox.showinfo("Success", "Book issued successfully")
else:
messagebox.showerror("Error", "Book not found")
self.issue_book_entry.delete(0, tk.END)
Определите метод, return_book(). Извлеките заголовок и проверьте, существует ли он в ленд_лист список. Если да, удалите его и добавьте обратно в список книг, а также обновите значение в записи как возвращенное. Отобразите окно сообщения об успешном завершении, указывающее, что пользователь вернул книгу.
Если название существует в списке книг и статус записи гласит: добавлен, отобразить окно сообщения об ошибке, в котором говорится, что человек не может вернуть книгу, так как ее никто не выдавал. В противном случае отобразите окно сообщения об ошибке, в котором говорится, что книга не найдена.
defreturn_book(self):
book = self.return_book_entry.get()if book in self.lend_list:
self.lend_list.remove(book)
self.books.append(book)
self.record[book] = "returned"
messagebox.showinfo("Success", "Book returned successfully")
elif book in self.books and self.record.get(book) == "added":
messagebox.showerror("Error", "Book can't be returned. It hasn't been issued.")
else:
messagebox.showerror("Error", "Book not found.")
self.return_book_entry.delete(0, tk.END)
Определите метод, просмотр_книг(). Инициализировать сообщение переменная как пустая. Создайте сообщение для выполнения интерполяции строк и отображения названия книг вместе с их статусом. Если сообщение пустое, доступных книг нет. Отобразите соответствующий вывод в окне сообщения.
defview_books(self):
message = ""for book, status in self.record.items():
message += f"{book}: {status}\n"ifnot message:
message = "No book records available."
messagebox.showinfo("Books", message)
Создайте экземпляр класса и запустите Tkinter. основной цикл () для прослушивания событий, пока вы не закроете окно. Использовать в __name__ == "__main__" идиома для запуска программы.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Пример вывода системы заимствования книг
При запуске программы она приветствует вас экраном регистрации/входа. После ввода учетных данных и нажатия кнопки регистр кнопка, программа добавит вас в качестве библиотекаря. Ввод тех же учетных данных и нажатие Авторизоваться вы перейдете к экрану управления.
При вводе названия книги и нажатии кнопки «Добавить книгу» программа отображает окно сообщения об успешном добавлении книги. Если вы нажмете кнопку проблемы, возврата или удаления, программа отобразит соответствующее окно сообщения при обновлении статуса.
При нажатии на Просмотр книг Кнопка, программа отображает название книг вместе с их статусом. Если вы удалите книгу, программа удалит ее название, и вы не сможете ее просмотреть.
В случае, если вы попытаетесь вернуть книгу, не выдав ее, или удалить книгу после ее выдачи, программа выводит окно сообщения об ошибке.
Улучшение приложения для заимствования книг
Эта реализация является основой для создания безопасного приложения с графическим интерфейсом производственного уровня. Вы можете улучшить его функциональность, внедрив проверку ввода, используя hashlib для хранения паролей, реализации надлежащей обработки ошибок и добавления сохраняемости данных в базе данных.
Кроме того, вы должны реализовать уровни аутентификации пользователей с различными уровнями доступа для читателей, библиотекарей и администраторов. Вы можете добавить функцию поиска для поиска книг и упростить доступ к ним.