FinalProjectAndresGMoran/app/panel_derecho.py

109 lines
4.4 KiB
Python

import tkinter as tk
from tkinter import messagebox
from app.chat import Chat
import threading
import pygame # Para reproducir música
class PanelDerecho:
def __init__(self, frame):
# Inicializar el cliente de chat
self.chat_client = Chat()
try:
self.chat_client.conectar_al_servidor()
except Exception as e:
messagebox.showerror("Error", f"No se pudo conectar al servidor de chat: {e}")
# Inicializar el reproductor de música
pygame.mixer.init()
# Asociar el frame del panel derecho
self.frame = frame
self.frame.configure(bg="lightblue", width=200)
self.frame.grid_propagate(False)
self.frame.columnconfigure(0, weight=1)
# Título del chat
chat_label = tk.Label(self.frame, text="Chat", font=("Helvetica", 12, "bold"), bg="white", fg="red")
chat_label.grid(row=0, column=0, sticky="ew", pady=5, padx=5)
# Área de entrada de mensaje
mensaje_label = tk.Label(self.frame, text="Mensaje", font=("Helvetica", 10), bg="lightblue")
mensaje_label.grid(row=1, column=0, sticky="w", padx=5)
self.entrada_mensaje = tk.Text(self.frame, height=5, bg="lightyellow", wrap="word")
self.entrada_mensaje.grid(row=2, column=0, sticky="ew", padx=5, pady=5)
# Botón de enviar
boton_enviar = tk.Button(self.frame, text="Enviar", bg="lightgreen", command=self.enviar_mensaje)
boton_enviar.grid(row=3, column=0, pady=5, padx=5, sticky="ew")
# Listado de mensajes
mensajes_frame = tk.Frame(self.frame, bg="white", bd=2, relief="sunken")
mensajes_frame.grid(row=4, column=0, sticky="nsew", padx=5, pady=5)
mensajes_frame.columnconfigure(0, weight=1)
self.mensajes_frame = mensajes_frame
# Reproductor de música
musica_frame = tk.Frame(self.frame, bg="lightgray", height=50)
musica_frame.grid(row=5, column=0, sticky="ew", padx=5, pady=5)
tk.Label(musica_frame, text="Reproductor música", bg="lightgray", font=("Helvetica", 10)).pack()
# Botones de control de música
boton_play = tk.Button(musica_frame, text="Play", bg="green", fg="white", command=self.reproducir_musica_thread)
boton_play.pack(side="left", padx=5)
boton_pause = tk.Button(musica_frame, text="Pause", bg="orange", fg="white", command=self.pausar_musica_thread)
boton_pause.pack(side="left", padx=5)
boton_restart = tk.Button(musica_frame, text="Restart", bg="blue", fg="white", command=self.reiniciar_musica_thread)
boton_restart.pack(side="left", padx=5)
self.frame.rowconfigure(4, weight=1)
# Métodos del chat
def enviar_mensaje(self):
"""Enviar un mensaje al servidor."""
texto = self.entrada_mensaje.get("1.0", tk.END).strip()
if texto:
try:
self.chat_client.enviar_mensaje(texto)
self.entrada_mensaje.delete("1.0", tk.END)
except Exception as e:
messagebox.showerror("Error", f"No se pudo enviar el mensaje: {e}")
else:
messagebox.showwarning("Aviso", "El mensaje está vacío.")
# Métodos para control de música
def reproducir_musica_thread(self):
"""Inicia un hilo para reproducir música."""
threading.Thread(target=self.reproducir_musica, daemon=True).start()
def reproducir_musica(self):
"""Reproduce una canción."""
try:
pygame.mixer.music.load("cancion.mp3")
pygame.mixer.music.play()
messagebox.showinfo("Reproducción", "Reproduciendo canción.")
except pygame.error as e:
messagebox.showerror("Error", f"No se pudo reproducir la canción: {e}")
def pausar_musica_thread(self):
"""Inicia un hilo para pausar la música."""
threading.Thread(target=self.pausar_musica, daemon=True).start()
def pausar_musica(self):
"""Pausa la música."""
pygame.mixer.music.pause()
messagebox.showinfo("Reproducción", "Música en pausa.")
def reiniciar_musica_thread(self):
"""Inicia un hilo para reiniciar la música."""
threading.Thread(target=self.reiniciar_musica, daemon=True).start()
def reiniciar_musica(self):
"""Reinicia la música desde el principio."""
pygame.mixer.music.stop()
pygame.mixer.music.play()
messagebox.showinfo("Reproducción", "Reproduciendo desde el principio.")