Está en la página 1de 6

📎

Proyecto 2
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk
from tkinter import ttk
import os

def es_vocal(letra):
letra = letra.upper()
return letra in ['A', 'E', 'I', 'O', 'U']

def es_letra_valida(letra):
letra = letra.upper()
return es_vocal(letra) or (letra >= 'A' and letra <= 'Z' and not es_vocal(letra))

def insertar_letra(event=None):
global tubo
letra = letra_entry.get().upper()
if len(letra) != 1:
messagebox.showwarning("Error", "Ingrese solo una letra.")
elif not es_letra_valida(letra):
messagebox.showwarning("Error", "No es posible ingresar esa letra.")
elif letra not in bolitas:
messagebox.showwarning("Error", "La letra no está disponible.")
elif ' ' not in tubo:
messagebox.showwarning("Error", "El tubo está lleno.")
else:
indice_vacio = tubo.index(' ')
tubo[indice_vacio] = letra
tubo_label.config(text=str(tubo))
actualizar_tubo_ordenado()

def eliminar_letra(event=None):
global tubo
try:
posicion = int(posicion_entry.get())
if posicion < 1 or posicion > 10:
messagebox.showwarning("Error", "Posición inválida.")
else:
tubo[posicion - 1] = ' '
tubo_label.config(text=str(tubo))
actualizar_tubo_ordenado()
except ValueError:
messagebox.showwarning("Error", "Entrada inválida. Por favor ingrese un número.")

def ordenar_tubo():
global tubo
tubo_ordenado = list(tubo)
vocales = [c for c in tubo_ordenado if es_vocal(c)]
consonantes = [c for c in tubo_ordenado if not es_vocal(c)]
vocales.sort()
consonantes.sort()
tubo_ordenado = vocales + consonantes + [' '] * (10 - len(vocales) - len(consonantes))
tubo = tubo_ordenado
actualizar_tubo_ordenado()

def vaciar_tubo():
global tubo
tubo = [' '] * 10
tubo_label.config(text=str(tubo))
actualizar_tubo_ordenado()

def actualizar_tubo_ordenado():
global tubo
for i, letra in enumerate(tubo):
if letra != ' ':
bolita_label = bolita_labels_ordenado[i]
bolita_label.config(text=letra, bg=colores[bolitas.index(letra)])
bolita_img = bolita_images[bolitas.index(letra)]
bolita_label.config(image=bolita_img)
bolita_label.image = bolita_img

Proyecto 2 1
else:
bolita_labels_ordenado[i].config(text=' ', bg='SystemButtonFace', image='')

tubo_label.config(text=str(tubo))

def salir_del_programa():
window.destroy()

presentacion_window = tk.Tk()
presentacion_window.title("Bolitas de Colores")
presentacion_window.attributes('-fullscreen', True)
ruta_imagen_fondo = os.path.expanduser("Imagenes/fondo2.jpg")
imagen_fondo = Image.open(ruta_imagen_fondo)
ancho, alto = presentacion_window.winfo_screenwidth(), presentacion_window.winfo_screenheight()
imagen_fondo = imagen_fondo.resize((ancho, alto), Image.ANTIALIAS)
imagen_fondo = ImageTk.PhotoImage(imagen_fondo)
fondo_label = tk.Label(presentacion_window, image=imagen_fondo)
fondo_label.place(x=0, y=0, relwidth=1, relheight=1)

style = ttk.Style()
style.configure('TPresentacion.TLabel', font=("Arial", 32), padding=20)
style.configure('TContinuar.TButton', font=("Arial", 14), padding=10)

presentacion_frame = ttk.Frame(presentacion_window)
presentacion_frame.pack(expand=True)
titulo_label = ttk.Label(presentacion_frame, text="Bolitas de Colores", style='TPresentacion.TLabel')
titulo_label.pack(pady=50)
creadores_label = ttk.Label(presentacion_frame, text="Creado por:\nKevin Castillo, José De Gracia, Eivar Sandoval", style='TPresentacion.TLa
creadores_label.pack(pady=50)
continuar_button = ttk.Button(presentacion_frame, text="Continuar", style='TContinuar.TButton', command=presentacion_window.destroy)
continuar_button.pack(pady=10)
presentacion_window.mainloop()

#DIVISIÓN DE VENTANAS
window = tk.Tk()
window.title("Bolitas de Colores")
window.attributes('-fullscreen', True)

style = ttk.Style()
style.configure('TButton', font=("Arial", 14))

tubo_frame = tk.Frame(window)
tubo_frame.pack(pady=20)

bolitas = ['A', 'E', 'I', 'O', 'U', 'B', 'C', 'D', 'M', 'V']
colores = ['yellow', 'pink', 'orange', 'red', 'blue', 'white', 'cyan', 'gold', 'purple', 'green']

bolita_images = []
for letra, color in zip(bolitas, colores):
bolita = Image.new('RGB', (60, 60), color)
bolita = bolita.resize((50, 50), Image.ANTIALIAS)
bolita_img = ImageTk.PhotoImage(bolita)
bolita_images.append(bolita_img)

bolita_labels = []
for letra, bolita_img in zip(bolitas, bolita_images):
bolita_label = tk.Label(tubo_frame, text=letra, font=("Arial", 14), bg=color, image=bolita_img, compound=tk.CENTER)
bolita_label.pack(side=tk.LEFT, padx=5)
bolita_labels.append(bolita_label)

letra_entry = tk.Entry(window, font=("Arial", 14))


letra_entry.pack(pady=10)
letra_entry.bind("<Return>", insertar_letra)

tubo_label = tk.Label(window, text=" " * 10, font=("Arial", 24))


tubo_label.pack()

insertar_button = ttk.Button(window, text="Insertar letra", command=insertar_letra)


insertar_button.pack(pady=10)

posicion_entry = tk.Entry(window, font=("Arial", 14))


posicion_entry.pack()
posicion_entry.bind("<Return>", eliminar_letra)

eliminar_button = ttk.Button(window, text="Eliminar letra", command=eliminar_letra)


eliminar_button.pack(pady=10)

ordenar_button = ttk.Button(window, text="Mostrar tubo ordenado", command=ordenar_tubo)

Proyecto 2 2
ordenar_button.pack(pady=10)

vaciar_button = ttk.Button(window, text="Vaciar tubo", command=vaciar_tubo)


vaciar_button.pack(pady=10)

tubo = [' '] * 10

tubo_ordenado_frame = tk.Frame(window)
tubo_ordenado_frame.pack(pady=20)

bolita_labels_ordenado = []
for i in range(10):
bolita_label = tk.Label(tubo_ordenado_frame, text=' ', font=("Arial", 14), bg='SystemButtonFace', image='')
bolita_label.grid(row=0, column=i, padx=5)
bolita_labels_ordenado.append(bolita_label)

salir_button = ttk.Button(window, text="Salir", command=salir_del_programa)


salir_button.pack(pady=10)

window.mainloop()

VENTANA DE PRESENTACIÓN
EJECUCIÓN

Tubo lleno con la misma letra

Proyecto 2 3
Tubo lleno con todas las letras disponibles (Antes de ordenar)

Tubo lleno con todas las letras disponibles (Después de ordenar)

Proyecto 2 4
Eliminando una letra

Eliminando una letra (Antes de ordenar)

Proyecto 2 5
Eliminando una letra (Después de ordenar)

Proyecto 2 6

También podría gustarte