Segui questo tutorial per imparare a creare un'app di base per la gestione dei dati con un semplice frontend GUI.
Un sistema di prestito di libri è un modo super conveniente per i bibliotecari di gestire l'inventario e le attività di prestito. Questa semplice app è ideale per biblioteche di piccole e grandi dimensioni, centri comunitari, circoli del libro e persino per la tua raccolta di libri personale.
Scrivendo l'app di esempio, imparerai come creare un'app GUI multipiattaforma, come utilizzare classi e oggetti per modellare entità e come modularizzare i tuoi programmi.
Installazione di Tkinter e creazione della schermata di accesso/registrazione utente
Per costruire il sistema di prestito dei libri, utilizzerai Tkinter. Tkinter è la libreria GUI standard per le applicazioni desktop Python. Per installarlo digitare da terminale:
pip install tkinter
Puoi trovare l'intero codice sorgente per costruire un sistema di prestito di libri per le biblioteche in questo Deposito GitHub.
Importa i moduli richiesti e definisci una classe,
Sistema di prestito libri. Definire un metodo di costruzione per la classe e inizializzare la root window, impostando il titolo, le dimensioni e il colore di sfondo dell'applicazione. Definisci due liste, libri E presta_lista, che utilizzerai per memorizzare i titoli dei libri e quelli che le persone hanno preso in prestito.Definire un dizionario, documentazione, che puoi utilizzare per aggiornare lo stato dei libri. Usa il setup_gui() metodo per creare l'interfaccia utente grafica e inizializzare un elenco vuoto, bibliotecari, che utilizzerai per archiviare le credenziali.
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 = []
Definire un metodo, setup_gui(). Per la schermata di registrazione/accesso, creerai tre etichette denominate login_label, nome_utente_etichetta, E etichetta_password. Per ogni etichetta, definisci l'elemento genitore in cui desideri inserirlo, il testo che dovrebbe visualizzare, lo stile del carattere che dovrebbe avere insieme al colore del carattere.
Insieme alle etichette, devi creare due widget di ingresso denominati username_entry E password_entry ottenere e conservare le credenziali del bibliotecario. Puoi costruire un controllo password per testare la sicurezza della tua password con Python. Usa il pacchetto manager per organizzare tutti questi widget e aggiungere il riempimento appropriato per l'aspetto visivo.
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
Definire un metodo, login(). Usa il Ottenere() metodo sul widget di ingresso per estrarre il valore delle credenziali inserite dal bibliotecario. Scorri l'elenco dei bibliotecari e controlla se il nome utente e la password corrispondono ai valori immessi. In caso affermativo, cancellare i valori immessi dall'inizio alla fine. Distruggi tutti i widget che hai creato e chiama il file book_management_screen() metodo per visualizzare la schermata di gestione del sistema di prestito libri.
In caso contrario, le credenziali di accesso non sono corrette o il bibliotecario non si è registrato. Visualizza il messaggio appropriato tramite il widget della finestra di messaggio di Tkinter. Nel caso lo desideri crittografa la tua password, installa il modulo 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.")
Definire un metodo, Registrati(). Estrai il valore delle credenziali inserite dal bibliotecario, aggiungile all'elenco del bibliotecario e cancella completamente le voci.
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)
Definire un metodo, book_management_screen(). Crea quattro etichette denominate add_libro_etichetta, return_book_label, remove_book_label, E issue_book_label. Crea quattro voci e quattro pulsanti corrispondenti a queste etichette e un altro pulsante per visualizzare l'elenco di tutti i libri insieme al loro stato. Usa il gestore pacchetti per organizzare gli elementi e aggiungere un po' di riempimento.
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)
Costruire la funzionalità del sistema di prestito libri
Definire un metodo, aggiungi_libro(). Estrai il contenuto del widget della voce e aggiungilo all'elenco dei libri. Nel dizionario dei record, aggiungi la chiave come titolo del libro e il valore come aggiunto. Visualizza una finestra di messaggio di successo che informa che il programma ha aggiunto il libro con successo. Cancella il contenuto del add_book_entry dall'inizio alla fine.
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)
Definire un metodo, rimuovi_libro(). Estrai il titolo del libro e controlla se è presente nel file libri elenco. Se esiste, rimuovilo e il suo record dal dizionario. Al termine, visualizza una finestra di messaggio di successo che informa che il programma ha rimosso il libro. Altrimenti, visualizza una finestra di messaggio di errore che dice che il libro non è stato trovato. Cancellare la voce del remove_book_entry completamente.
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)
Definire un metodo, numero_libro(). Estrai il titolo del libro e controlla se esiste nel file libri elenco. Se sì, aggiungi questo al file presta_lista list e rimuoverlo dall'elenco dei libri. Aggiorna il valore del libro come rilasciato. Altrimenti, visualizza una finestra di messaggio di errore che dice che il libro non è stato trovato. Cancella il contenuto del file 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)
Definire un metodo, ritorno_libro(). Estrai il titolo e controlla se esiste nel file presta_lista elenco. Se sì, rimuovilo e aggiungilo di nuovo all'elenco dei libri e aggiorna il valore nel record come restituito. Visualizza una finestra di messaggio di successo che indica che la persona ha restituito il libro.
Se il titolo esiste nell'elenco dei libri e lo stato del record è aggiunto, visualizza una finestra di messaggio di errore che indica che la persona non può restituire il libro poiché nessuno lo ha emesso. Altrimenti, visualizza una finestra di messaggio di errore che dice che il libro non è stato trovato.
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)
Definire un metodo, visualizza_libri(). Inizializza il Messaggio variabile come vuota. Costruisci il messaggio per eseguire l'interpolazione di stringhe e visualizzare il titolo dei libri insieme al loro stato. Se il messaggio è vuoto, non ci sono libri disponibili. Visualizza l'output corrispondente in una finestra di messaggio.
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)
Crea un'istanza della classe ed esegui Tkinter ciclo principale() per ascoltare gli eventi finché non chiudi la finestra. Utilizzo IL __nome__ == "__principale__" idioma per eseguire il programma.
defrun(self):
self.master.mainloop()
if __name__ == "__main__":
book_borrowing_system = BookBorrowingSystem()
book_borrowing_system.run()
Esempio di output del sistema di prestito libri
Durante l'esecuzione del programma, ti accoglie con una schermata di registrazione/accesso. Dopo aver inserito le credenziali e fatto clic su Registrati pulsante, il programma ti aggiunge come bibliotecario. Immettendo le stesse credenziali e colpendo Login ti porterà alla schermata di gestione.
Inserendo il titolo del libro e premendo su Aggiungi libro, il programma visualizza una finestra di messaggio che ha aggiunto il libro con successo. Se fai clic sul pulsante Problema, Restituisci o Rimuovi, il programma visualizza la finestra di messaggio appropriata durante l'aggiornamento dello stato.
Facendo clic sul Visualizza libri pulsante, il programma visualizza il titolo dei libri insieme al loro stato. Se rimuovi un libro, il programma cancella il titolo e non puoi visualizzarlo.
Se si tenta di restituire un libro senza emetterlo o di rimuovere un libro mentre è stato emesso, il programma visualizza una finestra di messaggio di errore.
Miglioramento dell'app per il prestito di libri
Questa implementazione è una base per la creazione di un'applicazione GUI sicura a livello di produzione. È possibile migliorare la sua funzionalità implementando la convalida dell'input, utilizzando hashlib per memorizzare le password, implementare una corretta gestione degli errori e aggiungere la persistenza dei dati con un database.
Oltre a questo, dovresti implementare livelli di autenticazione utente con diversi livelli di accesso per lettori, bibliotecari e amministratori. Puoi aggiungere funzionalità di ricerca per cercare libri e facilitarne l'accesso.