[Asm] 纯文本查看 复制代码
import sys
import os
import logging
import traceback
import gc
from PyQt6.QtWidgets import QApplication, QMessageBox
from PyQt6.QtGui import QFont, QColor, QPalette
from main_window import WebScraperGUI
def setup_logging():
log_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logs')
os.makedirs(log_dir, exist_ok=True)
log_path = os.path.join(log_dir, 'scraper.log')
if os.path.exists(log_path):
try:
os.remove(log_path)
except Exception:
pass
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s [%(levelname)s] %(module)s:%(lineno)d - %(message)s',
handlers=[
logging.FileHandler(log_path, encoding='utf-8', mode='w'),
logging.StreamHandler(sys.stdout)
]
)
return log_path
def main():
log_path = setup_logging()
logging.info('='*50)
logging.info('程序启动')
logging.info(f'Python版本: {sys.version}')
logging.info(f'日志文件: {log_path}')
try:
app = QApplication(sys.argv)
logging.info('QApplication 创建成功')
_f = QFont()
_f.setFamily('Microsoft YaHei')
_f.setPointSize(12)
_f.setHintingPreference(QFont.HintingPreference.PreferNoHinting)
_f.setStyleStrategy(QFont.StyleStrategy.PreferAntialias)
app.setFont(_f)
logging.info('字体设置完成')
_pal = app.palette()
_pal.setColor(QPalette.ColorRole.Highlight, QColor('#DDEAFC'))
_pal.setColor(QPalette.ColorRole.HighlightedText, QColor('#17365D'))
_pal.setColor(QPalette.ColorGroup.Inactive, QPalette.ColorRole.Highlight, QColor('#DDEAFC'))
_pal.setColor(QPalette.ColorGroup.Inactive, QPalette.ColorRole.HighlightedText, QColor('#17365D'))
_pal.setColor(QPalette.ColorGroup.Disabled, QPalette.ColorRole.Highlight, QColor('#A9BFD6'))
_pal.setColor(QPalette.ColorGroup.Disabled, QPalette.ColorRole.HighlightedText, QColor('#17365D'))
app.setPalette(_pal)
logging.info('调色板设置完成')
app.setStyleSheet(
'QWidget, QDialog, QMessageBox, QMainWindow, QMenu {'
'font-family: "Microsoft YaHei", "微软雅黑", "PingFang SC", "Segoe UI", sans-serif;'
'}'
'QLabel, QPushButton, QCheckBox, QRadioButton, QLineEdit, QComboBox, QMenu, QAction, QTabBar, QToolButton {'
'font-size: 11pt;'
'}'
'QPlainTextEdit, QTextEdit, QListWidget, QTableWidget, QAbstractItemView {'
'font-size: 10pt;'
'}'
'QGroupBox { font-size: 11pt; font-weight: 600; }'
'QSpinBox, QDoubleSpinBox, QDateTimeEdit, QDateEdit { font-size: 11pt; }'
'QHeaderView::section { font-size: 10pt; padding: 6px 10px; }'
'QLineEdit, QTextEdit, QPlainTextEdit, QListWidget, QAbstractItemView, QComboBox, QMenu, QDialog, QDialogButtonBox, QMessageBox {'
'selection-background-color: #DDEAFC;'
'selection-color: #17365D;'
'}'
'QDialog, QMessageBox { background: #FFFFFF; color: #1F2A44; }'
)
logging.info('样式表设置完成')
window = WebScraperGUI()
logging.info('WebScraperGUI 创建成功')
window.showMaximized()
logging.info('窗口显示成功,进入事件循环')
sys.exit(app.exec())
except Exception as e:
error_msg = f'程序启动失败: {str(e)}\n\n详细错误:\n{traceback.format_exc()}'
logging.error(error_msg)
try:
msg_box = QMessageBox()
msg_box.setIcon(QMessageBox.Critical)
msg_box.setWindowTitle('启动失败')
msg_box.setText(f'程序启动失败,请查看日志文件:\n{log_path}\n\n错误信息:\n{str(e)}')
msg_box.exec()
except Exception:
print(error_msg)
sys.exit(1)
finally:
logging.info('程序退出,清理资源')
gc.collect()
if __name__ == '__main__':
main()