76 lines
2.7 KiB
Python
76 lines
2.7 KiB
Python
import ctypes
|
|
from PySide6.QtWidgets import QApplication
|
|
from gui import TranslationApp # 기존 TranslationApp UI 사용
|
|
from logger_module import setup_logger
|
|
import asyncio
|
|
import os
|
|
from whale_translator import WhaleTranslator
|
|
|
|
|
|
# 절전모드를 방지하는 설정 값
|
|
ES_CONTINUOUS = 0x80000000
|
|
ES_SYSTEM_REQUIRED = 0x00000001
|
|
|
|
def prevent_sleep():
|
|
"""절전모드 방지를 위해 시스템 설정을 변경"""
|
|
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)
|
|
|
|
def allow_sleep():
|
|
"""절전모드 방지 설정을 해제"""
|
|
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)
|
|
|
|
async def process_qt_events(app, stop_event):
|
|
"""PySide6의 이벤트를 처리하는 비동기 함수"""
|
|
while not stop_event.done():
|
|
app.processEvents()
|
|
await asyncio.sleep(0.01) # 10ms마다 Qt 이벤트 처리
|
|
|
|
async def main():
|
|
# 로깅 설정
|
|
logger = setup_logger('default_logger', f'appTranslator.log')
|
|
|
|
# 절전모드 방지 활성화
|
|
prevent_sleep()
|
|
|
|
app = None
|
|
window = None # window 변수를 None으로 초기화하여 finally 블록에서 참조 가능하도록 함
|
|
|
|
stop_event = asyncio.Future() # 종료 이벤트 생성
|
|
|
|
try:
|
|
# PySide6 앱 실행
|
|
app = QApplication([])
|
|
|
|
# DPI 설정
|
|
try:
|
|
# DPI 인식 설정을 위한 환경 변수
|
|
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
|
|
os.environ["QT_SCALE_FACTOR"] = "1"
|
|
|
|
# DPI 인식 설정
|
|
ctypes.windll.shcore.SetProcessDpiAwareness(1) # 시스템 DPI 인식 대신 개별 모니터 인식으로 변경
|
|
except Exception as e:
|
|
logger.error(f"DPI 인식 설정 실패: {e}")
|
|
|
|
# 기존 TranslationApp UI 사용
|
|
whale_translator = WhaleTranslator(app, logger, secret_mode=True, vd_mode=True) # 모드 켜기
|
|
await whale_translator.start_whale_browser()
|
|
window = TranslationApp(logger, whale_translator) # PySide6 UI
|
|
window.show()
|
|
|
|
# asyncio와 PySide6 이벤트 루프를 통합
|
|
await asyncio.gather(
|
|
process_qt_events(app, stop_event), # PySide6 이벤트 처리, stop_event 추가
|
|
window.run_async_tasks(), # 비동기 작업
|
|
)
|
|
|
|
finally:
|
|
# 앱 종료 시 절전모드 방지 해제
|
|
allow_sleep()
|
|
stop_event.set_result(True) # 종료 이벤트 설정 (process_qt_events 종료)
|
|
if window: # window가 생성되었을 경우에만 close() 호출
|
|
await window.close() # window.close()를 finally 블록으로 이동
|
|
|
|
if __name__ == '__main__':
|
|
asyncio.run(main()) # 비동기 함수는 asyncio.run()으로 실행
|