Следвайте този урок, за да научите как да създадете основно приложение за управление на данни с прост GUI интерфейс.

Системата за заемане на книги е супер удобен начин за библиотекарите да управляват инвентара и дейностите по заемане. Това просто приложение е идеално за малки до големи библиотеки, читалища, клубове за книги и дори за вашата лична колекция от книги.

Пишейки примерното приложение, ще научите как да изградите междуплатформено GUI приложение, как да използвате класове и обекти за моделиране на обекти и как да модулирате вашите програми.

Инсталиране на Tkinter и изграждане на екрана за влизане/регистрация на потребителя

За да изградите системата за заемане на книги, ще използвате Tkinter. Tkinter е стандартната GUI библиотека за настолни приложения на Python. За да го инсталирате, въведете в терминала:

pip install tkinter

Тук можете да намерите целия изходен код за изграждане на система за заемане на книги за библиотеки GitHub хранилище.

Импортирайте необходимите модули и дефинирайте клас,

instagram viewer
Система за заемане на книги. Дефинирайте метод на конструктор за класа и инициализирайте основния прозорец, като зададете заглавието, размерите и цвета на фона на приложението. Дефинирайте два списъка, книги и списък_заем, които ще използвате, за да съхранявате заглавията на книгите и кои хора са заели.

Определете речник, запис, които можете да използвате, за да актуализирате състоянието на книгите. Използвай 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(). За екрана за регистрация/вход ще създадете три именувани етикета логин_етикет, потребителско_име_етикет, и парола_етикет. За всеки етикет дефинирайте родителския елемент, в който искате да го поставите, текста, който трябва да показва, стила на шрифта, който трябва да има, заедно с цвета на шрифта.

Заедно с етикетите трябва да създадете два уиджета за въвеждане с имена потребителско_име_запис и парола_въвеждане да получите и съхранявате пълномощията на библиотекаря. Можете да изградите a инструмент за проверка на пароли, за да тествате сигурността на вашата парола с 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(). Създайте четири именувани етикета добавяне на етикет_книга, връщане_етикет_книга, премахнете етикет_книга, и брой_етикет_книга. Създайте четири записа и четири бутона, съответстващи на тези етикети, и друг бутон, за да видите списъка с всички книги заедно с тяхното състояние. Използвайте мениджъра на пакети, за да организирате елементите и да добавите подложка.

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)

Определете метод, премахване_книга(). Извлечете заглавието на книгата и проверете дали присъства в книги списък. Ако съществува, премахнете го и неговия запис от речника. След като сте готови, покажете поле със съобщение за успех, което информира, че програмата е премахнала книгата. В противен случай покажете поле със съобщение за грешка, че книгата не е намерена. Изчистете записа на премахване_запис_книга напълно.

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)

Определете метод, view_books(). Инициализирайте съобщение променлива като празна. Конструирайте съобщението, за да извършите интерполация на низове и да покажете заглавията на книгите заедно с техния статус. Ако съобщението е празно, няма налични книги. Покажете съответния изход в поле за съобщение.

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 mainloop() за да слушате за събития, докато затворите прозореца. Използвайте на __име__ == "__основен__" идиома за да стартирате програмата.

defrun(self):
self.master.mainloop()

if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()

Примерен резултат от системата за заемане на книги

При стартиране на програмата тя ви посреща с екран за регистрация/вход. При въвеждане на идентификационните данни и щракване върху Регистрирам бутон, програмата ви добавя като библиотекар. Въвеждане на същите идентификационни данни и удряне Влизам ще ви навигира до екрана за управление.

При въвеждане на заглавието на книгата и натискане на Добавяне на книга, програмата показва поле със съобщение, че е добавила книгата успешно. Ако щракнете върху бутона за проблем, връщане или премахване, програмата показва съответното поле за съобщение, докато актуализира състоянието.

При щракване върху Преглед на книги програмата показва заглавието на книгите заедно с техния статус. Ако премахнете книга, програмата изтрива заглавието и не можете да я видите.

В случай, че се опитате да върнете книга, без да я издадете или да премахнете книга, докато е издадена, програмата показва поле със съобщение за грешка.

Подобряване на приложението за заемане на книги

Това внедряване е основа за изграждане на защитено GUI приложение на производствено ниво. Бихте могли да подобрите функционалността му, като внедрите проверка на входа, като използвате хашлиб за съхраняване на пароли, прилагане на правилно обработване на грешки и добавяне на устойчивост на данни с база данни.

Освен това трябва да внедрите нива на удостоверяване на потребителите с различни нива на достъп за читатели, библиотекари и администратори. Можете да добавите функция за търсене, за да търсите книги и да улесните достъпа до тях.