Fixed issues with threads where window wouldnt close as Tetris interfiered with tkinter widgets, threads are centralized now
This commit is contained in:
parent
490de3b54d
commit
46f445810a
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -10,13 +10,13 @@ class TetrisGame(tk.Canvas):
|
||||||
self.grid = [[0] * self.cols for _ in range(self.rows)]
|
self.grid = [[0] * self.cols for _ in range(self.rows)]
|
||||||
|
|
||||||
self.current_piece = None
|
self.current_piece = None
|
||||||
self.running = True
|
self.running = False
|
||||||
self.init_game()
|
self.init_game()
|
||||||
|
|
||||||
def init_game(self):
|
def init_game(self):
|
||||||
self.bind_all("<Key>", self.handle_keypress)
|
self.bind_all("<Key>", self.handle_keypress)
|
||||||
self.spawn_piece()
|
self.spawn_piece()
|
||||||
self.update_game()
|
#self.update_game()
|
||||||
|
|
||||||
def spawn_piece(self):
|
def spawn_piece(self):
|
||||||
shapes = [
|
shapes = [
|
||||||
|
@ -106,7 +106,7 @@ class TetrisGame(tk.Canvas):
|
||||||
self.rotate_piece()
|
self.rotate_piece()
|
||||||
|
|
||||||
def update_game(self):
|
def update_game(self):
|
||||||
if self.running:
|
if self.running and self.winfo_exists():
|
||||||
if not self.can_move(1, 0):
|
if not self.can_move(1, 0):
|
||||||
self.place_piece()
|
self.place_piece()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -19,4 +19,5 @@ class ThreadenTask:
|
||||||
"""Detiene el hilo"""
|
"""Detiene el hilo"""
|
||||||
self.running = False
|
self.running = False
|
||||||
if self.thread:
|
if self.thread:
|
||||||
self.thread.join()
|
self.thread.join(timeout=1)
|
||||||
|
self.thread = None
|
|
@ -5,6 +5,7 @@ import random
|
||||||
|
|
||||||
from services.threaden_task import ThreadenTask
|
from services.threaden_task import ThreadenTask
|
||||||
from services.system_monitor import SystemMonitor
|
from services.system_monitor import SystemMonitor
|
||||||
|
from services.tetris_game import TetrisGame
|
||||||
|
|
||||||
class ThreadsManager:
|
class ThreadsManager:
|
||||||
"""Constructor"""
|
"""Constructor"""
|
||||||
|
@ -15,6 +16,7 @@ class ThreadsManager:
|
||||||
"time": ThreadenTask(),
|
"time": ThreadenTask(),
|
||||||
"temperature": ThreadenTask(),
|
"temperature": ThreadenTask(),
|
||||||
"emails":ThreadenTask(),
|
"emails":ThreadenTask(),
|
||||||
|
"tetris_game":ThreadenTask(),
|
||||||
}
|
}
|
||||||
self.system_monitor_tasks = {}
|
self.system_monitor_tasks = {}
|
||||||
|
|
||||||
|
@ -41,20 +43,40 @@ class ThreadsManager:
|
||||||
metric
|
metric
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if hasattr(self.ui_instance, "tetris_game"):
|
||||||
|
self.tasks["tetris_game"].start(self.update_tetris_game)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def stop_threads(self):
|
def stop_threads(self):
|
||||||
"""Recorre tasks y para los hilos"""
|
"""Recorre tasks y para los hilos"""
|
||||||
for task in self.tasks.values():
|
for name, task in self.tasks.items():
|
||||||
task.stop()
|
task.stop()
|
||||||
|
print(f"Hilo '{name}' detenido")
|
||||||
|
|
||||||
for task in self.system_monitor_tasks.values():
|
for name, task in self.system_monitor_tasks.items():
|
||||||
task.stop()
|
task.stop()
|
||||||
|
print(f"Hilo de monitor del sistema '{name}' detenido.")
|
||||||
|
|
||||||
if self.system_monitor:
|
if self.system_monitor:
|
||||||
self.system_monitor.running = False
|
self.system_monitor.running = False
|
||||||
|
|
||||||
|
|
||||||
|
def update_tetris_game(self):
|
||||||
|
"""Ciclo de actualizacion del tetris game"""
|
||||||
|
while self.tasks["tetris_game"].running:
|
||||||
|
try:
|
||||||
|
if self.ui_instance.tetris_game.running and self.ui_instance.tetris_game.winfo_exists():
|
||||||
|
self.ui_instance.tetris_game.update_game()
|
||||||
|
time.sleep(0.5)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error en update_tetris_game: {e}")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def update_system_metric(self, metric):
|
def update_system_metric(self, metric):
|
||||||
"""Actualiza una métrica específica del monitor del sistema."""
|
"""Actualiza una métrica específica del monitor del sistema."""
|
||||||
|
|
Binary file not shown.
|
@ -56,6 +56,13 @@ class CenteredWindow(ctk.CTk):
|
||||||
def on_close(self):
|
def on_close(self):
|
||||||
"""Maneja el cierre de la ventana"""
|
"""Maneja el cierre de la ventana"""
|
||||||
self.thread_manager.stop_threads()
|
self.thread_manager.stop_threads()
|
||||||
|
|
||||||
|
if hasattr(self, "tetris_game") and self.tetris_game.running:
|
||||||
|
self.tetris_game.stop_game()
|
||||||
|
|
||||||
|
if "tetris_game" in self.thread_manager.tasks:
|
||||||
|
self.thread_manager.tasks["tetris_game"].stop()
|
||||||
|
|
||||||
self.destroy()
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,7 +148,7 @@ class CenteredWindow(ctk.CTk):
|
||||||
"""Método para iniciar el juego."""
|
"""Método para iniciar el juego."""
|
||||||
if not self.tetris_game.running:
|
if not self.tetris_game.running:
|
||||||
self.tetris_game.running = True
|
self.tetris_game.running = True
|
||||||
self.tetris_game.update_game()
|
#self.tetris_game.update_game()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue