79 lines
3.1 KiB
Python
79 lines
3.1 KiB
Python
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) |