Siga este tutorial para aprender a crear una aplicación básica de administración de datos con una interfaz gráfica de usuario simple.

Un sistema de préstamo de libros es una forma muy conveniente para que los bibliotecarios administren el inventario y las actividades de préstamo. Esta sencilla aplicación es ideal para bibliotecas pequeñas y grandes, centros comunitarios, clubes de lectura e incluso para su colección personal de libros.

Al escribir la aplicación de muestra, aprenderá cómo crear una aplicación GUI multiplataforma, cómo usar clases y objetos para modelar entidades y cómo modularizar sus programas.

Instalación de Tkinter y creación de la pantalla de inicio de sesión/registro de usuario

Para construir el sistema de préstamo de libros, utilizará Tkinter. Tkinter es la biblioteca GUI estándar para aplicaciones de escritorio de Python. Para instalarlo, escriba en la terminal:

pip install tkinter

Puede encontrar el código fuente completo para construir un sistema de préstamo de libros para bibliotecas en este repositorio GitHub.

instagram viewer

Importe los módulos requeridos y defina una clase, LibroPréstamoSistema. Defina un método constructor para la clase e inicialice la ventana raíz, configurando el título, las dimensiones y el color de fondo de la aplicación. Definir dos listas, libros y lista_de_préstamos, que usará para almacenar los títulos de los libros y cuáles ha tomado prestado la gente.

Definir un diccionario, registro, que puede utilizar para actualizar el estado de los libros. Utilizar el configuración_gui() método para crear la interfaz gráfica de usuario e inicializar una lista vacía, bibliotecarios, que utilizará para almacenar las credenciales.

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 = []

Definir un método, configuración_gui(). Para la pantalla de registro/inicio de sesión, creará tres etiquetas denominadas etiqueta_de_inicio de sesión, nombre_usuario_etiqueta, y etiqueta_contraseña. Para cada etiqueta, defina el elemento principal en el que desea colocarlo, el texto que debe mostrar, el estilo de fuente que debe tener junto con el color de fuente.

Junto con las etiquetas, debe crear dos widgets de entrada llamados nombre_usuario_entrada y contraseña_entrada para obtener y almacenar las credenciales del bibliotecario. Puedes construir un verificador de contraseñas para probar la seguridad de su contraseña con Python. Utilizar el embalar administrador para organizar todos estos widgets y agregar el relleno adecuado para el atractivo visual.

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

Definir un método, acceso(). Utilizar el conseguir() en el widget de entrada para extraer el valor de las credenciales ingresadas por el bibliotecario. Repita la lista de bibliotecarios y verifique si el nombre de usuario y la contraseña coinciden con los valores ingresados. En caso afirmativo, borre los valores introducidos desde el principio hasta el final. Destruye todos los widgets que creaste y llama al pantalla_de_gestión_de_libros() para visualizar la pantalla de gestión del sistema de préstamo de libros.

De lo contrario, las credenciales de inicio de sesión son incorrectas o el bibliotecario no se ha registrado. Muestre el mensaje apropiado a través del widget de cuadro de mensaje de Tkinter. En caso de que quieras cifra tu contraseña, instala el módulo 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.")

Definir un método, registro(). Extraiga el valor de las credenciales que ingresa el bibliotecario, agréguelas a la lista del bibliotecario y borre completamente las entradas.

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)

Definir un método, pantalla_de_gestión_de_libros(). Cree cuatro etiquetas nombradas añadir_etiqueta_libro, devolver_etiqueta_libro, eliminar_etiqueta_libro, y tema_libro_etiqueta. Cree cuatro entradas y cuatro botones correspondientes a estas etiquetas, y otro botón para ver la lista de todos los libros junto con su estado. Use el administrador de paquetes para organizar los elementos y agregar algo de relleno.

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)

Construyendo la Funcionalidad del Sistema de Préstamo de Libros

Definir un método, añadir_libro(). Extraiga el contenido del widget de entrada y agréguelo a la lista de libros. En el diccionario de registros, agregue la clave como título del libro y el valor como agregado. Muestra un cuadro de mensaje de éxito que indica que el programa ha agregado el libro con éxito. Borrar el contenido de la añadir_libro_entrada desde el principio hasta el final.

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)

Definir un método, quitar_libro(). Extraiga el título del libro y verifique si está presente en el libros lista. Si existe, elimínelo junto con su registro del diccionario. Una vez hecho esto, muestra un cuadro de mensaje de éxito que informa que el programa ha eliminado el libro. De lo contrario, muestra un cuadro de mensaje de error que dice que no se encontró el libro. Limpiar la entrada 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)

Definir un método, tema_libro(). Extrae el título del libro y comprueba si existe en el libros lista. En caso afirmativo, añádalo a la lista_de_préstamos lista y eliminarlo de la lista de libros. Actualizar el valor del libro como emitido. De lo contrario, muestra un cuadro de mensaje de error que dice que no se encontró el libro. Borrar el contenido de la tema_libro_entrada().

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)

Definir un método, devolver libro(). Extraiga el título y verifique si existe en el lista_de_préstamos lista. En caso afirmativo, elimínelo y agréguelo nuevamente a la lista de libros y actualice el valor en el registro como se devolvió. Muestre un cuadro de mensaje de éxito que indique que la persona ha devuelto el libro.

Si el título existe en la lista de libros y el estado del registro dice agregado, muestra un cuadro de mensaje de error que dice que la persona no puede devolver el libro porque nadie lo entregó. De lo contrario, muestra un cuadro de mensaje de error que dice que no se encuentra el libro.

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)

Definir un método, ver_libros(). Inicializar el mensaje variable como vacía. Construya el mensaje para realizar la interpolación de cadenas y mostrar el título de los libros junto con su estado. Si el mensaje está vacío, no hay libros disponibles. Muestre la salida correspondiente en un cuadro de mensaje.

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)

Cree una instancia de la clase y ejecute Tkinter bucle principal() para escuchar eventos hasta que cierre la ventana. Usar el __nombre__ == "__principal__" modismo para ejecutar el programa.

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

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

Ejemplo de salida del sistema de préstamo de libros

Al ejecutar el programa, lo saluda con una pantalla de registro/inicio de sesión. Al ingresar las credenciales y hacer clic en el Registro botón, el programa te agrega como bibliotecario. Ingresando las mismas credenciales y presionando Acceso lo llevará a la pantalla de administración.

Al ingresar el título del libro y presionar Add Book, el programa muestra un cuadro de mensaje que agregó el libro con éxito. Si hace clic en el botón de problema, devolución o eliminación, el programa muestra el cuadro de mensaje apropiado mientras actualiza el estado.

Al hacer clic en el Ver libros botón, el programa muestra el título de los libros junto con su estado. Si elimina un libro, el programa elimina el título y no puede verlo.

En caso de que intente devolver un libro sin emitirlo o retirar un libro mientras estaba emitido, el programa muestra un cuadro de mensaje de error.

Mejora de la aplicación de préstamo de libros

Esta implementación es la base para construir una aplicación GUI segura a nivel de producción. Puede mejorar su funcionalidad implementando la validación de entrada, usando hashlib para almacenar contraseñas, implementar el manejo adecuado de errores y agregar persistencia de datos con una base de datos.

Aparte de esto, debe implementar niveles de autenticación de usuario con diferentes niveles de acceso para lectores, bibliotecarios y administradores. Puede agregar la función de búsqueda para buscar libros y facilitar el acceso.