ChangePercenty2/main.py

69 lines
2.1 KiB
Python

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog
from asyncqt import QEventLoop
from ui.main_window import MainWindow
from ui.license_dialog import LicenseDialog
from utils.config import ConfigManager
from utils.logger import setup_logger
import logging, os
import asyncio
def main():
config = ConfigManager()
# config.ini 파일이 없을 경우 생성
if not os.path.exists('config.ini'):
config._create_default_config()
print("config.ini 파일이 생성되었습니다.")
# log_level = config.get('DEFAULT', 'log_level', fallback='DEBUG')
log_level = 'INFO'
# 로그 파일 경로 설정
log_file_path = os.path.join(os.path.dirname(__file__), 'application.log')
# 로그 설정 호출
logger = setup_logger(log_file=log_file_path, log_level=log_level)
# logger = setup_logger(log_level)
app = QApplication(sys.argv)
app.setStyle('Fusion')
# app.setStyle('windows')
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
license_dialog = LicenseDialog()
if license_dialog.exec_() == QDialog.Accepted:
main_window = MainWindow(config, logger)
main_window.show()
async def cleanup():
print("프로그램 종료 중...")
tasks = [task for task in asyncio.all_tasks(loop) if task is not asyncio.current_task()]
for task in tasks:
task.cancel()
results = await asyncio.gather(*tasks, return_exceptions=True)
for result in results:
if isinstance(result, Exception):
print(f"Task raised an exception: {result}")
loop.stop()
app.aboutToQuit.connect(lambda: asyncio.create_task(cleanup()))
with loop:
try:
loop.run_forever()
except KeyboardInterrupt:
pass
finally:
print("이벤트 루프 정리 중...")
if loop:
loop.close()
print("이벤트 루프 종료 완료.")
else:
sys.exit(0)
if __name__ == '__main__':
main()