from tkinter import * import tkinter as tk from tkinter import messagebox class Nodo: def __init__(self, dato): self.info = dato self.liga = None class Pila: def __init__(self): self.primero = None self.ultimo = None def ultimo_dato(self): ultimo_n = self.primero while (ultimo_n.liga != None): ultimo_n = ultimo_n.liga return ultimo_n def anterior(self, dato): p = self.primero y = None while (p != dato): y = p p = p.liga return y def desconectar(self, x, y): self.ultimo = self.ultimo_dato() if (x != self.primero): y.liga = x.liga if (x == self.ultimo): self.ultimo = y else: self.primero = self.primero.liga if (self.primero == None): self.ultimo = None def Apilar(self, nuevo_nodo): if self.primero: ultimo_nodo = self.primero while ultimo_nodo.liga != None: ultimo_nodo = ultimo_nodo.liga ultimo_nodo.liga = nuevo_nodo else: self.primero = nuevo_nodo def DesApilar(self): if (self.primero == None): messagebox.showinfo(title="☠Advertencia☠", message="Subdesbordamiento - No hay contenedores") else: self.desconectar(self.ultimo_dato(), self.anterior(self.ultimo_dato())) def MostrarPila(self): temp = self.primero if self.primero == None: messagebox.showinfo(title="☠Advertencia☠", message="No hay contenedores") while temp != None: panel_resultado.insert(0, (temp.info)) temp = temp.liga panel_resultado.insert(0, ("Contenedores: ")) panel_resultado.insert(0, (" ")) pila = Pila() # ---------------- Functions ---------------------------------------------- def menuSalir(): op = messagebox.askquestion("Salir","¿Desea finalizar el programa?") if op == "yes": raiz.destroy() def getNum(): if panel_entrada.get() == "": messagebox.showinfo(title="☠Advertencia☠", message="Ingrese la descripción del contenedor") else: num = str(panel_entrada.get()) pila.Apilar(Nodo(num)) panel_entrada.delete(0,END) def erase(): pila.DesApilar() def show(): pila.MostrarPila() def limpiar(): panel_resultado.delete(0,END) # --------------- Raiz ---------------------------------------------------- raiz = tk.Tk() raiz.title("Pilas") raiz.resizable(False,False) raiz.geometry("400x460") raiz.iconbitmap("Icono_Remington.ico") raiz.config(relief="groove", bd=10, background="#BFB377") numeroPantalla = StringVar() barraMenu = Menu(raiz) raiz.config(menu=barraMenu) opcionesMenu = Menu(barraMenu, tearoff=0) opcionesMenu.add_command(label="Salir", command=menuSalir) barraMenu.add_cascade(label="Opciones", menu=opcionesMenu) # ------------------ Frames ----------------------------------------------- frame1 = Frame(raiz) frame1.place(x=50, y=310) frame1.config(width=300, height=100, bg="white", relief="groove", bd=5) # ------------------ widgets ---------------------------------------------- Label(raiz, text=" ❃Contenedores❃ ", fg="white", bg="#BFB377", font=("Impact", 30)).place(x=25, y=10) Label(raiz, text=" ➤ Ingreso: ", fg="white", bg="#BFB377", font=("Impact", 20)).place(x=10, y=250) panel_entrada = Entry(raiz) panel_entrada.place(x=145, y=260) panel_entrada.config(relief="sunken", bd=5) panel_resultado = Listbox(raiz) panel_resultado.config(width=35, height=10, borderwidth=5, relief="sunken", bd=5) panel_resultado.place(x=80, y=72) barra = Scrollbar(raiz) barra.pack() barra.place(x=310, y=72, relheight=0.4) panel_resultado.config(yscrollcommand=barra.set) barra.config(command=panel_resultado.yview) buttonApilar = Button(raiz, text="Apilar", justify="center", command=getNum) buttonApilar.place(x=285, y=258) buttonApilar.config( state="normal", font=("Impact", 10), anchor="center", cursor="hand2", relief="raised", bd=5, activebackground="#4AB6EB" ) buttonDesapilar = Button(frame1, text="Desapilar", justify="center", command=erase) buttonDesapilar.place(x=20, y=20) buttonDesapilar.config( state="normal", font=("Impact", 15), anchor="center", cursor="hand2", relief="raised", bd=5, activebackground="#4AB6EB" ) buttonMostrar = Button(frame1, text="Mostrar", justify="center", command=show) buttonMostrar.place(x=170, y=20) buttonMostrar.config( state="normal", font=("Impact", 15), anchor="center", cursor="hand2", relief="raised", bd=5, activebackground="#4AB6EB" ) buttonLimpiar = Button(raiz, text="Limpiar", justify="center", command=limpiar) buttonLimpiar.place(x=10, y=100) buttonLimpiar.config( state="normal", font=("Impact", 10), anchor="center", cursor="hand2", relief="raised", bd=5, activebackground="#4AB6EB" ) raiz.mainloop()