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.current_piece = None
|
||||
self.running = True
|
||||
self.running = False
|
||||
self.init_game()
|
||||
|
||||
def init_game(self):
|
||||
self.bind_all("<Key>", self.handle_keypress)
|
||||
self.spawn_piece()
|
||||
self.update_game()
|
||||
#self.update_game()
|
||||
|
||||
def spawn_piece(self):
|
||||
shapes = [
|
||||
|
@ -106,7 +106,7 @@ class TetrisGame(tk.Canvas):
|
|||
self.rotate_piece()
|
||||
|
||||
def update_game(self):
|
||||
if self.running:
|
||||
if self.running and self.winfo_exists():
|
||||
if not self.can_move(1, 0):
|
||||
self.place_piece()
|
||||
else:
|
||||
|
|
|
@ -19,4 +19,5 @@ class ThreadenTask:
|
|||
"""Detiene el hilo"""
|
||||
self.running = False
|
||||
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.system_monitor import SystemMonitor
|
||||
from services.tetris_game import TetrisGame
|
||||
|
||||
class ThreadsManager:
|
||||
"""Constructor"""
|
||||
|
@ -15,6 +16,7 @@ class ThreadsManager:
|
|||
"time": ThreadenTask(),
|
||||
"temperature": ThreadenTask(),
|
||||
"emails":ThreadenTask(),
|
||||
"tetris_game":ThreadenTask(),
|
||||
}
|
||||
self.system_monitor_tasks = {}
|
||||
|
||||
|
@ -41,20 +43,40 @@ class ThreadsManager:
|
|||
metric
|
||||
)
|
||||
|
||||
if hasattr(self.ui_instance, "tetris_game"):
|
||||
self.tasks["tetris_game"].start(self.update_tetris_game)
|
||||
|
||||
|
||||
|
||||
def stop_threads(self):
|
||||
"""Recorre tasks y para los hilos"""
|
||||
for task in self.tasks.values():
|
||||
for name, task in self.tasks.items():
|
||||
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()
|
||||
print(f"Hilo de monitor del sistema '{name}' detenido.")
|
||||
|
||||
if self.system_monitor:
|
||||
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):
|
||||
"""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):
|
||||
"""Maneja el cierre de la ventana"""
|
||||
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()
|
||||
|
||||
|
||||
|
@ -141,7 +148,7 @@ class CenteredWindow(ctk.CTk):
|
|||
"""Método para iniciar el juego."""
|
||||
if not self.tetris_game.running:
|
||||
self.tetris_game.running = True
|
||||
self.tetris_game.update_game()
|
||||
#self.tetris_game.update_game()
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue