import tkinter as tk from tkinter import ttk, messagebox from tkinter.scrolledtext import ScrolledText class WinesUI(): def __init__(self, root, title = "AII"): self.root = root self.root.title(title) self.root.geometry("900x600") # Menu Principal self.menu = tk.Menu(self.root) self.root.config(menu=self.menu) # Menu Datos datos_menu = tk.Menu(self.menu, tearoff=0) datos_menu.add_command(label="Cargar", command=lambda: self.callback("cargar")) datos_menu.add_separator() datos_menu.add_command(label="Salir", command=self.root.quit) self.menu.add_cascade(label="Datos", menu=datos_menu) # Menu Listar listar_menu = tk.Menu(self.menu, tearoff=0) listar_menu.add_command(label= "Recetas", command = lambda: self.callback("listar_recetas")) # Menu Buscar buscar_menu = tk.Menu(self.menu, tearoff=0) buscar_menu.add_command(label="Receta por autor", command=lambda: self.callback("buscar_autor")) buscar_menu.add_command(label="Receta por fecha", command=lambda: self.callback("buscar_fecha")) self.menu.add_cascade(label="Buscar", menu=buscar_menu) # Callback externo desde el punto de entrada self.callback = None def show_list(self, items, fields, title="Listado"): mw = tk.Toplevel(self.root) mw.title(title) listbox = tk.Listbox(mw, width=80, height=20) listbox.pack(side="left", fill="both", expand=True) scrollbar = tk.Scrollbar(mw) scrollbar.pack(side="right", fill="y") listbox.config(yscrollcommand=scrollbar.set) scrollbar.config(command=listbox.yview) for item in items: row = " | ".join(str(item[field]) for field in fields) listbox.insert("end", row) def ask_text(self, label, callback): mw = tk.Toplevel(self.root) mw.title(label) tk.Label(mw, text=label).pack(pady=5) entry = ttk.Entry(mw) entry.pack(pady=5) ttk.Button(mw, text="Aceptar", command= lambda: [callback(entry.get()), mw.destroy()]).pack(pady=10) def ask_spinbox(self, label, options, callback): mw = tk.Toplevel(self.root) mw.title(label) tk.Label(mw, text=label).pack(pady=5) spinbox = ttk.Spinbox(mw, values=options, state="readonly", width=40) spinbox.pack(pady=5) ttk.Button(mw, text="Aceptar", command= lambda: [callback(spinbox.get()), mw.destroy()]).pack(pady=10) def ask_radiobutton(self, label, options, callback): mw = tk.Toplevel(self.root) mw.title(label) tk.Label(mw, text=label).pack(pady=5) sv = tk.StringVar(value=options[0]) for option in options: tk.Radiobutton(mw, text=option, variable=sv, value=option).pack(anchor="w") ttk.Button(mw, text="Aceptar", command= lambda: [callback(sv.get()), mw.destroy()]).pack(pady=10) def info(slef, message): messagebox.showinfo("Información", message)