diff --git a/.gitignore b/.gitignore index 2316695..a8c6d57 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ # Python __pycache__/ *.py[cod] +*.spec *$py.class *.so .Python diff --git a/guba.ico b/guba.ico new file mode 100644 index 0000000..d6d1eb0 Binary files /dev/null and b/guba.ico differ diff --git a/main.py b/main.py index ded22e0..fcdbc31 100644 --- a/main.py +++ b/main.py @@ -15,6 +15,48 @@ from llm_analyzer import LLMAnalyzer from main_window import MainWindow +class ScreenshotWorker(QObject): + """截图工作器 - 专门处理上证所截图""" + + sse_screenshot_fetched = Signal(str) + error_occurred = Signal(str) + + def __init__(self, spider: SpiderManager): + super().__init__() + self.spider = spider + self.running = False + logger.info("ScreenshotWorker 初始化完成") + + def start(self): + """启动截图任务""" + self.running = True + logger.info("截图任务已启动") + + def stop(self): + """停止截图任务""" + self.running = False + logger.info("截图任务已停止") + + def do_fetch(self): + """执行截图获取""" + if not self.running: + return + + try: + logger.info("开始爬取上证所网页截图") + screenshot_path = self.spider.fetch_sse_screenshot() + + if screenshot_path: + logger.info(f"成功获取截图: {screenshot_path}") + self.sse_screenshot_fetched.emit(screenshot_path) + else: + logger.warning("未能获取有效的截图") + + except Exception as e: + logger.error(f"爬取截图失败: {str(e)}") + self.error_occurred.emit(f"截图失败: {str(e)}") + + class BackendWorker(QObject): """后台工作器 - 处理爬取和分析任务""" @@ -289,11 +331,23 @@ def main(): # 线程结束时停止工作 worker_thread.finished.connect(worker.stop) + # 创建截图后台线程 + logger.info("创建截图后台线程...") + screenshot_worker = ScreenshotWorker(spider) + screenshot_thread = QThread() + screenshot_worker.moveToThread(screenshot_thread) + screenshot_thread.started.connect(screenshot_worker.start) + screenshot_thread.finished.connect(screenshot_worker.stop) + # 创建主窗口 logger.info("创建主窗口...") window = MainWindow(config, spider) window.show() + # 连接截图信号(在创建window后连接) + screenshot_worker.sse_screenshot_fetched.connect(window.update_sse_screenshot) + screenshot_worker.error_occurred.connect(lambda msg: logger.error(msg)) + # 连接信号 worker.status_update.connect(window.update_status) worker.analysis_finished.connect(window.update_indicator) @@ -313,17 +367,21 @@ def main(): worker_thread.start() logger.info("后台线程已启动") + # 启动截图后台线程 + screenshot_thread.start() + logger.info("截图后台线程已启动") + # 启动股票数据爬取定时器 stock_timer = QTimer() stock_timer.timeout.connect(worker.fetch_stock_data) stock_timer.start(60000) # 每分钟爬取一次股票数据 logger.info("股票数据爬取定时器已启动,间隔60秒") - # 启动上证所截图爬取定时器 + # 启动上证所截图爬取定时器(使用独立的截图线程,不再阻塞主循环) screenshot_timer = QTimer() - screenshot_timer.timeout.connect(worker.fetch_sse_screenshot) - screenshot_timer.start(300000) # 每5分钟爬取一次截图 - logger.info("上证所截图爬取定时器已启动,间隔300秒") + screenshot_timer.timeout.connect(screenshot_worker.do_fetch) + screenshot_timer.start(60000) # 每1分钟爬取一次截图 + logger.info("上证所截图爬取定时器已启动,间隔60秒") # 确保应用退出时清理线程 def cleanup(): @@ -332,6 +390,11 @@ def main(): worker_thread.quit() worker_thread.wait() + # 停止截图线程 + screenshot_worker.stop() + screenshot_thread.quit() + screenshot_thread.wait() + # 显示统计信息 logger.info("=== 程序运行统计 ===") logger.info(f"爬取网站次数: {worker.fetch_count}") diff --git a/main_window.py b/main_window.py index d40332a..262ede7 100644 --- a/main_window.py +++ b/main_window.py @@ -451,6 +451,10 @@ class MainWindow(QWidget): self.screenshot_label.setText("截图加载失败") logger.warning("截图加载失败") + def add_waveform_data(self, time_str: str, value: float): + """添加波形图数据点(暂未实现波形图功能)""" + logger.debug(f"波形图数据: 时间={time_str}, 值={value}") + class QCheckBox(QPushButton): """自定义复选框""" diff --git a/sse_screenshot.png b/sse_screenshot.png index c3d6797..d9ef3ad 100644 Binary files a/sse_screenshot.png and b/sse_screenshot.png differ