Følg denne vejledning for at lære, hvordan du bygger en grundlæggende datastyringsapp med en simpel GUI-frontend.
Et boglånesystem er en super bekvem måde for bibliotekarer at administrere lager- og låneaktiviteter. Denne enkle app er ideel til små til store biblioteker, samfundscentre, bogklubber og endda til din personlige bogsamling.
Når du skriver eksempelappen, lærer du om, hvordan du bygger en GUI-app på tværs af platforme, hvordan du bruger klasser og objekter til at modellere enheder, og hvordan du modulariserer dine programmer.
Installation af Tkinter og opbygning af brugerlogin/registreringsskærmen
For at opbygge boglånesystemet vil du gøre brug af Tkinter. Tkinter er standard GUI-biblioteket til Python desktop-applikationer. For at installere det skal du indtaste terminalen:
pip install tkinter
Du kan finde hele kildekoden til at bygge et bogudlånssystem til biblioteker i denne GitHub-depot.
Importer de nødvendige moduler og definer en klasse, Boglånesystem. Definer en konstruktørmetode for klassen og initialiser rodvinduet, indstil titlen, dimensionerne og baggrundsfarven for applikationen. Definer to lister,
bøger og udlånsliste, som du vil bruge til at gemme bøgernes titler og hvilke folk har lånt.Definer en ordbog, optage, som du kan bruge til at opdatere bøgernes status. Brug setup_gui() metode til at oprette den grafiske brugergrænseflade og initialisere en tom liste, bibliotekarer, som du vil bruge til at gemme legitimationsoplysningerne.
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 = []
Definer en metode, setup_gui(). Til registrerings-/loginskærmen vil du oprette tre navngivne etiketter login_label, brugernavn_etiket, og password_label. For hver etiket skal du definere det overordnede element, du vil placere det i, den tekst, den skal vise, den skrifttype, den skal have sammen med skriftfarven.
Sammen med etiketterne skal du oprette to navngivne indgangswidgets brugernavn_indgang og password_entry at hente og opbevare bibliotekarens legitimationsoplysninger. Du kan bygge en adgangskodekontrol for at teste din adgangskodesikkerhed med Python. Brug pakke manager til at organisere alle disse widgets og tilføje den passende polstring for visuel appel.
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
Definer en metode, Log på(). Brug få() metode på indgangswidget'en for at udtrække værdien af de legitimationsoplysninger, der er indtastet af bibliotekaren. Gentag listen over bibliotekarer og kontroller, om brugernavnet og adgangskoden matcher de indtastede værdier. Hvis ja, skal du slette de indtastede værdier fra start til slut. Ødelæg alle de widgets, du har oprettet, og kald book_management_screen() metode til at vise administrationsskærmen for boglånesystemet.
Ellers er login-oplysningerne forkerte, eller bibliotekaren har ikke registreret sig. Vis den relevante besked via Tkinters beskedboks-widget. Hvis du vil krypter din adgangskode, installer bcrypt-modulet.
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.")
Definer en metode, Tilmeld(). Udtræk værdien af de legitimationsoplysninger, som bibliotekaren indtaster, tilføj dem til bibliotekarens liste, og ryd fuldstændigt ud af posterne.
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)
Definer en metode, book_management_screen(). Opret fire navngivne etiketter add_book_label, return_book_label, fjern_bog_etiket, og issue_book_label. Opret fire poster og fire knapper, der svarer til disse etiketter, og en anden knap for at se listen over alle bøger sammen med deres status. Brug pakkehåndteringen til at organisere elementerne og tilføje noget polstring.
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)
Opbygning af funktionaliteten af boglånesystemet
Definer en metode, tilføje_bog(). Udpak indholdet af indgangswidgetten og føj det til boglisten. Tilføj nøglen som bogens titel og værdien som i postordbogen tilføjet. Vis en succesmeddelelsesboks, der fortæller, at programmet har tilføjet bogen med succes. Ryd indholdet af add_book_entry fra start til slut.
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)
Definer en metode, remove_book(). Træk bogens titel ud og tjek, om den findes i bøger liste. Hvis den findes, skal du fjerne den og dens registrering fra ordbogen. Når det er gjort, skal du vise en succesmeddelelsesboks, der informerer om, at programmet har fjernet bogen. Ellers skal du vise en fejlmeddelelsesboks, der siger, at bogen ikke blev fundet. Ryd indtastningen af remove_book_entry fuldstændig.
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)
Definer en metode, issue_book(). Træk bogens titel ud og kontroller, om den findes i bøger liste. Hvis ja, føj dette til udlånsliste listen og fjern den fra boglisten. Opdater værdien af bogen som udstedt. Ellers skal du vise en fejlmeddelelsesboks, der siger, at bogen ikke blev fundet. Ryd indholdet af 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)
Definer en metode, return_book(). Udpak titlen og kontroller, om den findes i udlånsliste liste. Hvis ja, fjern den og føj den tilbage til boglisten og opdater værdien i posten som returneret. Vis en succesmeddelelsesboks, der angiver, at personen har returneret bogen.
Hvis titlen findes i boglisten og status for posten læses tilføjet, vis en fejlmeddelelsesboks, der siger, at personen ikke kan returnere bogen, da ingen har udstedt den. Ellers skal du vise en fejlmeddelelsesboks, der siger, at bogen ikke blev fundet.
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)
Definer en metode, view_books(). Initialiser besked variabel som tom. Konstruer meddelelsen til at udføre strenginterpolation og vise bøgernes titel sammen med deres status. Hvis beskeden er tom, er der ingen tilgængelige bøger. Vis det tilsvarende output i en meddelelsesboks.
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)
Opret en instans af klassen og kør Tkinter mainloop() at lytte efter begivenheder, indtil du lukker vinduet. Brug det __navn__ == "__main__" idiom at køre programmet.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Eksempel output af boglånesystemet
Når du kører programmet, byder det dig velkommen med en registrerings-/loginskærm. Når du indtaster legitimationsoplysningerne og klikker på Tilmeld knappen, tilføjer programmet dig som bibliotekar. Indtaster de samme legitimationsoplysninger og slår Log på vil navigere dig til administrationsskærmen.
Når du indtaster bogens titel og trykker på Tilføj bog, viser programmet en beskedboks om, at det har tilføjet bogen. Hvis du klikker på problem-, retur- eller fjernknappen, viser programmet den relevante meddelelsesboks, mens status opdateres.
Ved at klikke på Se bøger knappen, viser programmet titlen på bøgerne sammen med deres status. Hvis du fjerner en bog, sletter programmet titlen, og du kan ikke se den.
Hvis du forsøger at returnere en bog uden at udstede den eller fjerne en bog, mens den er udstedt, viser programmet en fejlmeddelelsesboks.
Forbedring af boglåneappen
Denne implementering er grundlaget for at bygge en sikker GUI-applikation på produktionsniveau. Du kan forbedre dens funktionalitet ved at implementere inputvalidering ved at bruge hashlib at gemme adgangskoder, implementere korrekt fejlhåndtering og tilføje datapersistens med en database.
Ud over dette bør du implementere brugergodkendelsesniveauer med forskellige adgangsniveauer for læsere, bibliotekarer og administratorer. Du kan tilføje søgefunktionalitet for at søge efter bøger og gøre det nemmere at få adgang til.