Generation

generate functionSun, 07 Apr 2024

necesito que cuando un propietario que ya este en la base de tados pueda ver sus articulos pero solo las de el para que las pueda modificar, corrige el codigo y escribelo de nuevo completo import tkinter as tk from tkinter import simpledialog, messagebox from tkinter import ttk import pickle nombre_entry = None correo_entry = None codigo_entry = None class Usuario: def __init__(self, nombre, correo, codigo): self.nombre = nombre self.correo = correo self.codigo = codigo self.articulos = [] def agregar_articulo(self, articulo): self.articulos.append(articulo) class Articulo: def __init__(self, titulo, fabricante, descripcion, dimensiones, fechap): self.titulo = titulo self.fabricante = fabricante self.descripcion = descripcion self.dimensiones = dimensiones self.estado = "Disponible" self.fechap = fechap def cargar_articulos(): try: with open("articulos_disponibles.pickle", "rb") as f: return pickle.load(f) except FileNotFoundError: return [] def guardar_articulos(articulos): with open("articulos_disponibles.pickle", "wb") as f: pickle.dump(articulos, f) def ingresar_datos_propietario(): global nombre_entry, correo_entry, codigo_entry root = tk.Toplevel() root.title("Ingresar Datos de Propietario") nombre_label = ttk.Label(root, text="Nombre:") nombre_label.grid(row=0, column=0, padx=5, pady=5) nombre_entry = ttk.Entry(root) nombre_entry.grid(row=0, column=1, padx=5, pady=5) correo_label = ttk.Label(root, text="Correo electrónico:") correo_label.grid(row=1, column=0, padx=5, pady=5) correo_entry = ttk.Entry(root) correo_entry.grid(row=1, column=1, padx=5, pady=5) codigo_label = ttk.Label(root, text="Código:") codigo_label.grid(row=2, column=0, padx=5, pady=5) codigo_entry = ttk.Entry(root) codigo_entry.grid(row=2, column=1, padx=5, pady=5) def ingresar_datos_usuario(): try: with open("propietarios.pickle", "rb") as f: propietarios = pickle.load(f) except FileNotFoundError: propietarios = [] propietario_registrado = False for prop in propietarios: if prop.nombre == nombre_entry.get() and prop.correo == correo_entry.get() and prop.codigo == codigo_entry.get(): propietario_registrado = True ingresar_articulos_existente(prop) break if not propietario_registrado: prop = Usuario(nombre_entry.get(), correo_entry.get(), codigo_entry.get()) propietarios.append(prop) with open("propietarios.pickle", "wb") as f: pickle.dump(propietarios, f) root.destroy() ingresar_articulos(prop) submit_button = ttk.Button(root, text="Aceptar", command=ingresar_datos_usuario) submit_button.grid(row=3, columnspan=2, padx=5, pady=5) root.mainloop() def ingresar_articulos(propietario): root = tk.Toplevel() root.title("Ingresar Artículos") def guardar_nuevos_articulos(): articulos = [] for child in frame.winfo_children(): if isinstance(child, ttk.Frame): titulo = child.children["!entry"].get() fabricante = child.children["!entry2"].get() descripcion = child.children["!entry3"].get() dimensiones_str = child.children["!entry4"].get() fechap_str = child.children["!entry5"].get() if titulo.strip() and fabricante.strip() and descripcion.strip() and dimensiones_str.strip() and fechap_str.strip(): try: dimensiones = tuple(map(int, dimensiones_str.split(","))) fechap = int(fechap_str) except ValueError: messagebox.showerror("Error", "Por favor, ingrese valores numéricos válidos para las dimensiones y los días de préstamo.") return articulo = Articulo(titulo, fabricante, descripcion, dimensiones, fechap) propietario.agregar_articulo(articulo) articulos.append(articulo) else: messagebox.showerror("Error", "Por favor, complete todos los campos.") return todos_articulos = cargar_articulos() todos_articulos.extend(articulos) guardar_articulos(todos_articulos) root.destroy() canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) num_articulos = simpledialog.askinteger("Artículos", "Ingrese la cantidad de artículos que desea agregar:") if num_articulos is not None: for i in range(num_articulos): articulo_frame = ttk.Frame(frame) articulo_frame.grid(row=i, column=0, padx=5, pady=5) titulo_label = ttk.Label(articulo_frame, text="Título:") titulo_label.grid(row=0, column=0, padx=5, pady=5) titulo_entry = ttk.Entry(articulo_frame) titulo_entry.grid(row=0, column=1, padx=5, pady=5) titulo_entry.focus() fabricante_label = ttk.Label(articulo_frame, text="Fabricante:") fabricante_label.grid(row=1, column=0, padx=5, pady=5) fabricante_entry = ttk.Entry(articulo_frame) fabricante_entry.grid(row=1, column=1, padx=5, pady=5) descripcion_label = ttk.Label(articulo_frame, text="Descripción:") descripcion_label.grid(row=2, column=0, padx=5, pady=5) descripcion_entry = ttk.Entry(articulo_frame) descripcion_entry.grid(row=2, column=1, padx=5, pady=5) dimensiones_label = ttk.Label(articulo_frame, text="Dimensiones (largo, ancho, alto):") dimensiones_label.grid(row=3, column=0, padx=5, pady=5) dimensiones_entry = ttk.Entry(articulo_frame) dimensiones_entry.grid(row=3, column=1, padx=5, pady=5) fechap_label = ttk.Label(articulo_frame, text="Días disponibles para préstamo:") fechap_label.grid(row=4, column=0, padx=5, pady=5) fechap_entry = ttk.Entry(articulo_frame) fechap_entry.grid(row=4, column=1, padx=5, pady=5) submit_button = ttk.Button(root, text="Aceptar", command=guardar_nuevos_articulos) submit_button.pack(pady=5) root.mainloop() def ingresar_articulos_existente(propietario): root = tk.Toplevel() root.title("Opciones para Propietario Existente") def agregar_articulos(): root.destroy() ingresar_articulos(propietario) def ver_mis_articulos(): root.destroy() ver_articulos() agregar_button = ttk.Button(root, text="Agregar Más Artículos", command=agregar_articulos) agregar_button.grid(row=0, column=0, padx=5, pady=5) ver_button = ttk.Button(root, text="Ver Mis Artículos", command=ver_mis_articulos) ver_button.grid(row=0, column=1, padx=5, pady=5) root.mainloop() def ver_articulos(): root = tk.Toplevel() root.title("Artículos Disponibles") try: with open("articulos_disponibles.pickle", "rb") as f: articulos = pickle.load(f) except FileNotFoundError: messagebox.showinfo("Error", "No hay artículos disponibles.") root.destroy() return canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) for i, articulo in enumerate(articulos, 1): if articulo.estado == "Disponible": label_text = f"{i}. Título: {articulo.titulo}\nFabricante: {articulo.fabricante}\nDescripción: {articulo.descripcion}\nDimensiones: {articulo.dimensiones}\nDías disponibles para préstamo: {articulo.fechap}" label = ttk.Label(frame, text=label_text) label.pack(pady=5) elif articulo.estado == "Prestado": label = ttk.Label(frame, text=f"{i}. Título: {articulo.titulo} (Prestado)") label.pack(pady=5) root.mainloop() def ingresar_datos_prestatario(): root = tk.Toplevel() root.title("Ingresar Datos de Prestatario") nombre_label = ttk.Label(root, text="Nombre:") nombre_label.grid(row=0, column=0, padx=5, pady=5) nombre_entry = ttk.Entry(root) nombre_entry.grid(row=0, column=1, padx=5, pady=5) correo_label = ttk.Label(root, text="Correo electrónico:") correo_label.grid(row=1, column=0, padx=5, pady=5) correo_entry = ttk.Entry(root) correo_entry.grid(row=1, column=1, padx=5, pady=5) codigo_label = ttk.Label(root, text="Código:") codigo_label.grid(row=2, column=0, padx=5, pady=5) codigo_entry = ttk.Entry(root) codigo_entry.grid(row=2, column=1, padx=5, pady=5) def ingresar_datos_usuario(): prestatario = Usuario(nombre_entry.get(), correo_entry.get(), codigo_entry.get()) root.destroy() mostrar_articulos_disponibles(prestatario) submit_button = ttk.Button(root, text="Aceptar", command=ingresar_datos_usuario) submit_button.grid(row=3, columnspan=2, padx=5, pady=5) root.mainloop() def mostrar_articulos_disponibles(prestatario): root = tk.Toplevel() root.title("Artículos Disponibles") try: with open("articulos_disponibles.pickle", "rb") as f: articulos = pickle.load(f) except FileNotFoundError: messagebox.showinfo("Error", "No hay artículos disponibles.") root.destroy() return canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) def seleccionar_articulo(articulo): if articulo.estado == "Prestado": messagebox.showinfo("Error", f"El artículo '{articulo.titulo}' ya está prestado.") return dias_prestamo = tk.simpledialog.askinteger("Días de Préstamo", f"¿Por cuántos días desea prestar '{articulo.titulo}'?") if dias_prestamo is None: messagebox.showinfo("Cancelado", f"No se ha seleccionado ningún número de días para '{articulo.titulo}'.") return elif dias_prestamo > articulo.fechap: messagebox.showinfo("Error", f"No puede prestar '{articulo.titulo}' por más de {articulo.fechap} días.") return messagebox.showinfo("Confirmación", f"Ha seleccionado prestar '{articulo.titulo}' por {dias_prestamo} días.") # Cambiar el estado del artículo y agregarlo al diccionario de artículos prestados articulo.estado = "Prestado" # Actualizar el archivo de artículos disponibles with open("articulos_disponibles.pickle", "wb") as f: pickle.dump(articulos, f) for i, articulo in enumerate(articulos, 1): if articulo.estado == "Disponible": label_text = f"{i}. Título: {articulo.titulo}\nFabricante: {articulo.fabricante}\nDescripción: {articulo.descripcion}\nDimensiones: {articulo.dimensiones}\nDías disponibles para préstamo: {articulo.fechap}" label = ttk.Label(frame, text=label_text) label.pack(pady=5) button = ttk.Button(frame, text="Seleccionar", command=lambda a=articulo: seleccionar_articulo(a)) button.pack(pady=5) elif articulo.estado == "Prestado": label = ttk.Label(frame, text=f"{i}. Título: {articulo.titulo} (Prestado)") label.pack(pady=5) root.mainloop() def main(): main_frame = tk.Tk() main_frame.title("Sistema de Préstamo de la Universidad Militar Nueva Granada") main_frame.geometry("500x400") style = ttk.Style(main_frame) style.configure('TButton', padding=10, relief="raised", foreground="black", background="#1E90FF", font=('Helvetica', 12, 'bold')) propietario_button = ttk.Button(main_frame, text="Propietario", command=ingresar_datos_propietario) propietario_button.grid(row=0, column=0, padx=5, pady=5) prestatario_button = ttk.Button(main_frame, text="Prestatario", command=ingresar_datos_prestatario) prestatario_button.grid(row=0, column=1, padx=5, pady=5) main_frame.mainloop() if __name__ == "__main__": main()

function that: add two numbers together ```python def add(a, b): return a + b add(1, 2) ``` function that: necesito que cuando un propietario que ya este en la base de tados pueda ver sus articulos pero solo las de el para que las pueda modificar, corrige el codigo y escribelo de nuevo completo import tkinter as tk from tkinter import simpledialog, messagebox from tkinter import ttk import pickle nombre_entry = None correo_entry = None codigo_entry = None class Usuario: def __init__(self, nombre, correo, codigo): self.nombre = nombre self.correo = correo self.codigo = codigo self.articulos = [] def agregar_articulo(self, articulo): self.articulos.append(articulo) class Articulo: def __init__(self, titulo, fabricante, descripcion, dimensiones, fechap): self.titulo = titulo self.fabricante = fabricante self.descripcion = descripcion self.dimensiones = dimensiones self.estado = "Disponible" self.fechap = fechap def cargar_articulos(): try: with open("articulos_disponibles.pickle", "rb") as f: return pickle.load(f) except FileNotFoundError: return [] def guardar_articulos(articulos): with open("articulos_disponibles.pickle", "wb") as f: pickle.dump(articulos, f) def ingresar_datos_propietario(): global nombre_entry, correo_entry, codigo_entry root = tk.Toplevel() root.title("Ingresar Datos de Propietario") nombre_label = ttk.Label(root, text="Nombre:") nombre_label.grid(row=0, column=0, padx=5, pady=5) nombre_entry = ttk.Entry(root) nombre_entry.grid(row=0, column=1, padx=5, pady=5) correo_label = ttk.Label(root, text="Correo electrónico:") correo_label.grid(row=1, column=0, padx=5, pady=5) correo_entry = ttk.Entry(root) correo_entry.grid(row=1, column=1, padx=5, pady=5) codigo_label = ttk.Label(root, text="Código:") codigo_label.grid(row=2, column=0, padx=5, pady=5) codigo_entry = ttk.Entry(root) codigo_entry.grid(row=2, column=1, padx=5, pady=5) def ingresar_datos_usuario(): try: with open("propietarios.pickle", "rb") as f: propietarios = pickle.load(f) except FileNotFoundError: propietarios = [] propietario_registrado = False for prop in propietarios: if prop.nombre == nombre_entry.get() and prop.correo == correo_entry.get() and prop.codigo == codigo_entry.get(): propietario_registrado = True ingresar_articulos_existente(prop) break if not propietario_registrado: prop = Usuario(nombre_entry.get(), correo_entry.get(), codigo_entry.get()) propietarios.append(prop) with open("propietarios.pickle", "wb") as f: pickle.dump(propietarios, f) root.destroy() ingresar_articulos(prop) submit_button = ttk.Button(root, text="Aceptar", command=ingresar_datos_usuario) submit_button.grid(row=3, columnspan=2, padx=5, pady=5) root.mainloop() def ingresar_articulos(propietario): root = tk.Toplevel() root.title("Ingresar Artículos") def guardar_nuevos_articulos(): articulos = [] for child in frame.winfo_children(): if isinstance(child, ttk.Frame): titulo = child.children["!entry"].get() fabricante = child.children["!entry2"].get() descripcion = child.children["!entry3"].get() dimensiones_str = child.children["!entry4"].get() fechap_str = child.children["!entry5"].get() if titulo.strip() and fabricante.strip() and descripcion.strip() and dimensiones_str.strip() and fechap_str.strip(): try: dimensiones = tuple(map(int, dimensiones_str.split(","))) fechap = int(fechap_str) except ValueError: messagebox.showerror("Error", "Por favor, ingrese valores numéricos válidos para las dimensiones y los días de préstamo.") return articulo = Articulo(titulo, fabricante, descripcion, dimensiones, fechap) propietario.agregar_articulo(articulo) articulos.append(articulo) else: messagebox.showerror("Error", "Por favor, complete todos los campos.") return todos_articulos = cargar_articulos() todos_articulos.extend(articulos) guardar_articulos(todos_articulos) root.destroy() canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) num_articulos = simpledialog.askinteger("Artículos", "Ingrese la cantidad de artículos que desea agregar:") if num_articulos is not None: for i in range(num_articulos): articulo_frame = ttk.Frame(frame) articulo_frame.grid(row=i, column=0, padx=5, pady=5) titulo_label = ttk.Label(articulo_frame, text="Título:") titulo_label.grid(row=0, column=0, padx=5, pady=5) titulo_entry = ttk.Entry(articulo_frame) titulo_entry.grid(row=0, column=1, padx=5, pady=5) titulo_entry.focus() fabricante_label = ttk.Label(articulo_frame, text="Fabricante:") fabricante_label.grid(row=1, column=0, padx=5, pady=5) fabricante_entry = ttk.Entry(articulo_frame) fabricante_entry.grid(row=1, column=1, padx=5, pady=5) descripcion_label = ttk.Label(articulo_frame, text="Descripción:") descripcion_label.grid(row=2, column=0, padx=5, pady=5) descripcion_entry = ttk.Entry(articulo_frame) descripcion_entry.grid(row=2, column=1, padx=5, pady=5) dimensiones_label = ttk.Label(articulo_frame, text="Dimensiones (largo, ancho, alto):") dimensiones_label.grid(row=3, column=0, padx=5, pady=5) dimensiones_entry = ttk.Entry(articulo_frame) dimensiones_entry.grid(row=3, column=1, padx=5, pady=5) fechap_label = ttk.Label(articulo_frame, text="Días disponibles para préstamo:") fechap_label.grid(row=4, column=0, padx=5, pady=5) fechap_entry = ttk.Entry(articulo_frame) fechap_entry.grid(row=4, column=1, padx=5, pady=5) submit_button = ttk.Button(root, text="Aceptar", command=guardar_nuevos_articulos) submit_button.pack(pady=5) root.mainloop() def ingresar_articulos_existente(propietario): root = tk.Toplevel() root.title("Opciones para Propietario Existente") def agregar_articulos(): root.destroy() ingresar_articulos(propietario) def ver_mis_articulos(): root.destroy() ver_articulos() agregar_button = ttk.Button(root, text="Agregar Más Artículos", command=agregar_articulos) agregar_button.grid(row=0, column=0, padx=5, pady=5) ver_button = ttk.Button(root, text="Ver Mis Artículos", command=ver_mis_articulos) ver_button.grid(row=0, column=1, padx=5, pady=5) root.mainloop() def ver_articulos(): root = tk.Toplevel() root.title("Artículos Disponibles") try: with open("articulos_disponibles.pickle", "rb") as f: articulos = pickle.load(f) except FileNotFoundError: messagebox.showinfo("Error", "No hay artículos disponibles.") root.destroy() return canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) for i, articulo in enumerate(articulos, 1): if articulo.estado == "Disponible": label_text = f"{i}. Título: {articulo.titulo}\nFabricante: {articulo.fabricante}\nDescripción: {articulo.descripcion}\nDimensiones: {articulo.dimensiones}\nDías disponibles para préstamo: {articulo.fechap}" label = ttk.Label(frame, text=label_text) label.pack(pady=5) elif articulo.estado == "Prestado": label = ttk.Label(frame, text=f"{i}. Título: {articulo.titulo} (Prestado)") label.pack(pady=5) root.mainloop() def ingresar_datos_prestatario(): root = tk.Toplevel() root.title("Ingresar Datos de Prestatario") nombre_label = ttk.Label(root, text="Nombre:") nombre_label.grid(row=0, column=0, padx=5, pady=5) nombre_entry = ttk.Entry(root) nombre_entry.grid(row=0, column=1, padx=5, pady=5) correo_label = ttk.Label(root, text="Correo electrónico:") correo_label.grid(row=1, column=0, padx=5, pady=5) correo_entry = ttk.Entry(root) correo_entry.grid(row=1, column=1, padx=5, pady=5) codigo_label = ttk.Label(root, text="Código:") codigo_label.grid(row=2, column=0, padx=5, pady=5) codigo_entry = ttk.Entry(root) codigo_entry.grid(row=2, column=1, padx=5, pady=5) def ingresar_datos_usuario(): prestatario = Usuario(nombre_entry.get(), correo_entry.get(), codigo_entry.get()) root.destroy() mostrar_articulos_disponibles(prestatario) submit_button = ttk.Button(root, text="Aceptar", command=ingresar_datos_usuario) submit_button.grid(row=3, columnspan=2, padx=5, pady=5) root.mainloop() def mostrar_articulos_disponibles(prestatario): root = tk.Toplevel() root.title("Artículos Disponibles") try: with open("articulos_disponibles.pickle", "rb") as f: articulos = pickle.load(f) except FileNotFoundError: messagebox.showinfo("Error", "No hay artículos disponibles.") root.destroy() return canvas = tk.Canvas(root) canvas.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollbar.pack(side="right", fill="y") canvas.configure(yscrollcommand=scrollbar.set) frame = ttk.Frame(canvas) canvas.create_window((0,0), window=frame, anchor="nw") def on_frame_configure(event): canvas.configure(scrollregion=canvas.bbox("all")) frame.bind("<Configure>", on_frame_configure) def seleccionar_articulo(articulo): if articulo.estado == "Prestado": messagebox.showinfo("Error", f"El artículo '{articulo.titulo}' ya está prestado.") return dias_prestamo = tk.simpledialog.askinteger("Días de Préstamo", f"¿Por cuántos días desea prestar '{articulo.titulo}'?") if dias_prestamo is None: messagebox.showinfo("Cancelado", f"No se ha seleccionado ningún número de días para '{articulo.titulo}'.") return elif dias_prestamo > articulo.fechap: messagebox.showinfo("Error", f"No puede prestar '{articulo.titulo}' por más de {articulo.fechap} días.") return messagebox.showinfo("Confirmación", f"Ha seleccionado prestar '{articulo.titulo}' por {dias_prestamo} días.") # Cambiar el estado del artículo y agregarlo al diccionario de artículos prestados articulo.estado = "Prestado" # Actualizar el archivo de artículos disponibles with open("articulos_disponibles.pickle", "wb") as f: pickle.dump(articulos, f) for i, articulo in enumerate(articulos, 1): if articulo.estado == "Disponible": label_text = f"{i}. Título: {articulo.titulo}\nFabricante: {articulo.fabricante}\nDescripción: {articulo.descripcion}\nDimensiones: {articulo.dimensiones}\nDías disponibles para préstamo: {articulo.fechap}" label = ttk.Label(frame, text=label_text) label.pack(pady=5) button = ttk.Button(frame, text="Seleccionar", command=lambda a=articulo: seleccionar_articulo(a)) button.pack(pady=5) elif articulo.estado == "Prestado": label = ttk.Label(frame, text=f"{i}. Título: {articulo.titulo} (Prestado)") label.pack(pady=5) root.mainloop() def main(): main_frame = tk.Tk() main_frame.title("Sistema de Préstamo de la Universidad Militar Nueva Granada") main_frame.geometry("500x400") style = ttk.Style(main_frame) style.configure('TButton', padding=10, relief="raised", foreground="black", background="#1E90FF", font=('Helvetica', 12, 'bold')) propietario_button = ttk.Button(main_frame, text="Propietario", command=ingresar_datos_propietario) propietario_button.grid(row=0, column=0, padx=5, pady=5) prestatario_button = ttk.Button(main_frame, text="Prestatario", command=ingresar_datos_prestatario) prestatario_button.grid(row=0, column=1, padx=5, pady=5) main_frame.mainloop() if __name__ == "__main__": main() ```Python

Want to kickstart your project?Use the new AI Studio to create your code