keypresser/main.py

66 lines
2.5 KiB
Python

import tkinter as tk
import logging
import sys
import os
# --- Setup Python Path for MVC Imports ---
# Get the absolute path of the directory containing main.py
current_dir = os.path.dirname(os.path.abspath(__file__))
# Add the current directory to sys.path to allow importing from model/, view/, controller/
sys.path.insert(0, current_dir)
# Import the main Model class and the message queue from app_logger
from model.key_press_model import KeyPressModel # Updated import path
from model.app_logger import message_queue, setup_logging_from_config # Updated import for logging setup
from view.view import KeyPressView
from controller.controller import KeyPressController
# --- Global Logging Setup will now be handled by setup_logging_from_config from model.app_logger ---
# No direct logging setup here, just calling the setup function.
logger = logging.getLogger(__name__) # Logger for the main.py module itself
if __name__ == "__main__":
# Set up logging early using the config file provided by app_logger
current_log_file_path = setup_logging_from_config()
# --- Python Environment Diagnostics (Included for completeness) ---
print(f"--- Python Environment Diagnostics ---")
print(f"Python Executable: {sys.executable}")
print(f"Python Version: {sys.version}")
print(f"Python Path (sys.path):")
for p in sys.path:
print(f" {p}")
print(f"--- End Diagnostics ---")
logger.info("Main: Application starting up.")
logger.info(f"Main: Logging all output to file: {current_log_file_path}")
main_error_occurred = False
try:
root = tk.Tk()
# Instantiate Model, View, and Controller
model = KeyPressModel()
controller = KeyPressController(model, None)
view = KeyPressView(root, controller)
controller.view = view
controller.initial_setup_after_view_is_ready()
root.protocol("WM_DELETE_WINDOW", controller.on_app_close)
logger.info("Main: GUI initialized. Starting main loop.")
root.mainloop()
except Exception as e:
logger.critical(f"Main: An unhandled exception occurred in the main application loop: {e}", exc_info=True)
main_error_occurred = True
finally:
logger.info("Main: Application loop ended. Ensuring all background processes are stopped.")
print("Application closed. Jarvis signing off.")
if main_error_occurred and not getattr(sys, 'frozen', False):
print("\nAn unexpected error occurred. Press Enter to exit the console...")
input()