Följ den här handledningen för att lära dig hur du bygger en grundläggande datahanteringsapp med ett enkelt GUI-gränssnitt.
Ett boklånesystem är ett superbekvämt sätt för bibliotekarier att hantera inventering och låneaktiviteter. Denna enkla app är idealisk för små till stora bibliotek, samhällscentra, bokklubbar och till och med för din personliga boksamling.
När du skriver exempelappen kommer du att lära dig hur du bygger en plattformsoberoende GUI-app, hur du använder klasser och objekt för att modellera enheter och hur du modulariserar dina program.
Installera Tkinter och bygga användarinloggnings-/registreringsskärmen
För att bygga boklånesystemet kommer du att använda dig av Tkinter. Tkinter är standard GUI-biblioteket för Python-skrivbordsapplikationer. För att installera det, skriv in terminalen:
pip install tkinter
Du hittar hela källkoden för att bygga ett boklånesystem för bibliotek i denna GitHub-förråd.
Importera de nödvändiga modulerna och definiera en klass, Boklånesystem. Definiera en konstruktormetod för klassen och initiera rotfönstret, ställ in titeln, dimensionerna och bakgrundsfärgen för programmet. Definiera två listor,
böcker och lend_list, som du kommer att använda för att lagra titlarna på böckerna och vilka folk har lånat.Definiera en ordbok, spela in, som du kan använda för att uppdatera statusen för böckerna. Använd setup_gui() metod för att skapa det grafiska användargränssnittet och initiera en tom lista, bibliotekarier, som du kommer att använda för att lagra autentiseringsuppgifterna.
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 = []
Definiera en metod, setup_gui(). För registrerings-/inloggningsskärmen kommer du att skapa tre namngivna etiketter login_label, användarnamn_etikett, och lösenordsetikett. För varje etikett, definiera det överordnade elementet du vill placera den i, texten den ska visa, typsnittsstilen den ska ha tillsammans med teckensnittsfärgen.
Tillsammans med etiketterna måste du skapa två namngivna postwidgets username_entry och password_entry för att hämta och lagra bibliotekariens referenser. Du kan bygga en lösenordskontroll för att testa din lösenordssäkerhet med Python. Använd packa manager för att organisera alla dessa widgets och lägga till lämplig stoppning för visuell tilltalande.
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
Definiera en metod, logga in(). Använd skaffa sig() metod på inmatningswidgeten för att extrahera värdet på de referenser som bibliotekarien angett. Gå igenom listan över bibliotekarier och kontrollera om användarnamnet och lösenordet matchar de angivna värdena. Om ja, radera de angivna värdena från början till slut. Förstör alla widgets du skapat och ring till book_management_screen() metod för att visa hanteringsskärmen för boklånesystemet.
Annars är inloggningsuppgifterna felaktiga eller så har bibliotekarien inte registrerat sig. Visa lämpligt meddelande via Tkinters meddelanderutawidget. Om du vill kryptera ditt lösenord, installera bcrypt-modulen.
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.")
Definiera en metod, Registrera(). Extrahera värdet av inloggningsuppgifterna som bibliotekarien anger, lägg till dem i bibliotekariens lista och rensa helt bort posterna.
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)
Definiera en metod, book_management_screen(). Skapa fyra namngivna etiketter add_book_label, return_book_label, remove_book_label, och issue_book_label. Skapa fyra poster och fyra knappar som motsvarar dessa etiketter, och en annan knapp för att se listan över alla böcker tillsammans med deras status. Använd pakethanteraren för att organisera elementen och lägga till lite stoppning.
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)
Bygga funktionaliteten hos boklånesystemet
Definiera en metod, add_book(). Extrahera innehållet i postwidgeten och lägg till det i boklistan. I postordboken lägger du till nyckeln som bokens titel och värdet som Lagt till. Visa en framgångsmeddelanderuta som talar om att programmet har lagt till boken framgångsrikt. Rensa innehållet i add_book_entry från början till 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)
Definiera en metod, remove_book(). Extrahera bokens titel och kontrollera om den finns i böcker lista. Om det finns, ta bort det och dess post från ordboken. När du är klar, visa en framgångsmeddelanderuta som informerar om att programmet har tagit bort boken. Annars visar du ett felmeddelande som säger att boken inte hittades. Rensa posten för remove_book_entry fullständigt.
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)
Definiera en metod, issue_book(). Extrahera bokens titel och kontrollera om den finns i böcker lista. Om ja, lägg till detta till lend_list listan och ta bort den från boklistan. Uppdatera bokens värde som utfärdad. Annars visar du en felmeddelanderuta som säger att boken inte hittades. Rensa innehållet i 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)
Definiera en metod, return_book(). Extrahera titeln och kontrollera om den finns i lend_list lista. Om ja, ta bort den och lägg till den i boklistan och uppdatera värdet i posten som returneras. Visa en framgångsmeddelanderuta som anger att personen har lämnat tillbaka boken.
Om titeln finns i boklistan och statusen för posten läses Lagt till, visa en felmeddelanderuta som säger att personen inte kan returnera boken eftersom ingen har gett ut den. Annars visar du en felmeddelanderuta som säger att boken inte hittas.
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)
Definiera en metod, view_books(). Initiera meddelande variabel som tom. Konstruera meddelandet för att utföra stränginterpolation och visa böckernas titel tillsammans med deras status. Om meddelandet är tomt finns det inga böcker tillgängliga. Visa motsvarande utdata i en meddelanderuta.
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)
Skapa en instans av klassen och kör Tkinter mainloop() för att lyssna efter händelser tills du stänger fönstret. Använda sig av de __namn__ == "__main__" idiom för att köra programmet.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Exempel på utmatning av boklånesystemet
När du kör programmet hälsar det dig med en registrerings-/inloggningsskärm. När du anger autentiseringsuppgifterna och klickar på Registrera knappen lägger programmet till dig som bibliotekarie. Anger samma referenser och slår Logga in navigerar dig till hanteringsskärmen.
När du anger bokens titel och trycker på Lägg till bok, visar programmet en meddelanderuta att det har lagt till boken. Om du klickar på problemet, returnera eller ta bort-knappen visar programmet lämplig meddelanderuta medan statusen uppdateras.
När du klickar på Visa böcker knappen visar programmet titeln på böckerna tillsammans med deras status. Om du tar bort en bok tar programmet bort titeln och du kan inte se den.
Om du försöker returnera en bok utan att ge ut den eller ta bort en bok medan den är utfärdad, visar programmet ett felmeddelande.
Förbättra boklåneappen
Denna implementering är en grund för att bygga en säker GUI-applikation på produktionsnivå. Du kan förbättra dess funktionalitet genom att implementera indatavalidering med hjälp av hashlib att lagra lösenord, implementera korrekt felhantering och lägga till databeständighet med en databas.
Bortsett från detta bör du implementera användarautentiseringsnivåer med olika åtkomstnivåer för läsare, bibliotekarier och administratörer. Du kan lägga till sökfunktioner för att söka efter böcker och göra det lättare att komma åt.