diff --git a/build.spec b/build.spec deleted file mode 100644 index b0c8336..0000000 --- a/build.spec +++ /dev/null @@ -1,84 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- - -import os -import sys -from PyInstaller.utils.hooks import collect_data_files, collect_submodules - -# 添加当前目录到路径 -current_dir = os.getcwd() -sys.path.append(current_dir) - -block_cipher = None - -# 收集Playwright的数据文件 -playwright_data = collect_data_files('playwright') - -# 添加额外的隐藏导入 -hiddenimports = [ - 'PySide6.Qt6Compat', - 'loguru', - 'playwright._impl._driver', - 'playwright._impl._api_structures', - 'playwright._impl._connection', - 'playwright._impl._transport', -] - -# 排除PyQt5,避免冲突 -excludes = ['PyQt5', 'PyQt6'] - -a = Analysis( - ['main.py'], - pathex=[], - binaries=[], - datas=[ - *playwright_data, - ('guba.ico', '.'), - ('indicator.ico', '.'), - ('config.json', '.'), - ], - hiddenimports=hiddenimports, - hookspath=[], - hooksconfig={}, - runtime_hooks=[], - excludes=excludes, - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False, -) - -# 添加必要的二进制文件 -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) - -exe = EXE( - pyz, - a.scripts, - a.binaries, - a.datas, - [], - name='guba-indicator', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - upx_exclude=[], - runtime_tmpdir=None, - console=False, # 不显示控制台窗口 - icon='guba.ico', - disable_windowed_traceback=False, - argv_emulation=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None, -) - -# 如果需要单文件,使用以下配置 -coll = COLLECT( - exe, - a.binaries, - a.datas, - strip=False, - upx=True, - upx_exclude=[], - name='guba-indicator', -) \ No newline at end of file diff --git a/main.exe b/main.exe index 4c136cd..e921eb8 100644 Binary files a/main.exe and b/main.exe differ diff --git a/main_window.py b/main_window.py index 262ede7..86c2367 100644 --- a/main_window.py +++ b/main_window.py @@ -4,7 +4,7 @@ PySide6 GUI界面模块 from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QSlider, QDialog, QFormLayout, QLineEdit, QSpinBox, QMessageBox, QSystemTrayIcon, - QMenu, QTextEdit, QGroupBox, QDialogButtonBox, QCheckBox, QScrollArea) + QMenu, QTextEdit, QGroupBox, QDialogButtonBox, QCheckBox, QScrollArea, QFileDialog) from PySide6.QtCore import Qt, QTimer, Signal, QPoint from PySide6.QtGui import QFont, QColor, QPainter, QBrush, QPen, QIcon, QAction, QPixmap from typing import Callable, Optional @@ -153,6 +153,16 @@ class ConfigDialog(QDialog): layout.addRow("User Agent:", self.user_agent_edit) layout.addRow("刷新间隔(s):", self.interval_spin) + # Playwright目录配置 + playwright_dir_layout = QHBoxLayout() + self.playwright_dir_edit = QLineEdit(spider_config.get('playwright_dir', '')) + self.playwright_dir_edit.setPlaceholderText("留空则自动查找Playwright浏览器") + self.playwright_browse_btn = QPushButton("浏览...") + self.playwright_browse_btn.clicked.connect(self._browse_playwright_dir) + playwright_dir_layout.addWidget(self.playwright_dir_edit) + playwright_dir_layout.addWidget(self.playwright_browse_btn) + layout.addRow("Playwright目录:", playwright_dir_layout) + # UI 配置 ui_config = self.config_manager.ui_config @@ -186,6 +196,17 @@ class ConfigDialog(QDialog): button_box.rejected.connect(self.reject) layout.addRow(button_box) + def _browse_playwright_dir(self): + """浏览Playwright目录""" + directory = QFileDialog.getExistingDirectory( + self, + "选择Playwright浏览器目录", + "", + QFileDialog.ShowDirsOnly | QFileDialog.DontResolveSymlinks + ) + if directory: + self.playwright_dir_edit.setText(directory) + def _save_config(self): """保存配置""" # LLM API @@ -201,7 +222,8 @@ class ConfigDialog(QDialog): target_url=self.url_edit.text(), xpath=self.xpath_edit.text(), user_agent=self.user_agent_edit.text(), - fetch_interval=self.interval_spin.value() + fetch_interval=self.interval_spin.value(), + playwright_dir=self.playwright_dir_edit.text() ) # UI diff --git a/sse_screenshot.png b/sse_screenshot.png index 649cd1e..f69f07e 100644 Binary files a/sse_screenshot.png and b/sse_screenshot.png differ