diff --git a/backend/config.py b/backend/config.py index 091ab9e..ea678c0 100644 --- a/backend/config.py +++ b/backend/config.py @@ -1,5 +1,6 @@ import os +import sys from pathlib import Path from qfluentwidgets import (qconfig, ConfigItem, QConfig, OptionsValidator, BoolValidator, OptionsConfigItem, EnumSerializer, RangeValidator, RangeConfigItem, ConfigValidator) @@ -101,7 +102,13 @@ class Config(QConfig): # 视频保存目录 saveDirectory = ConfigItem("Main", "SaveDirectory", "", ConfigValidator()) -CONFIG_FILE = 'config/config.json' +# PyInstaller 打包后配置文件写入 .app bundle 同级目录(避免修改签名) +if getattr(sys, 'frozen', False): + # sys.executable -> Contents/MacOS/VideoSubtitleRemover, 向上3级到 .app 所在目录 + _app_dir = os.path.dirname(os.path.dirname(os.path.dirname(sys.executable))) + CONFIG_FILE = os.path.join(_app_dir, 'config', 'config.json') +else: + CONFIG_FILE = 'config/config.json' config = Config() qconfig.load(CONFIG_FILE, config) diff --git a/backend/main.py b/backend/main.py index b067f1c..d11df57 100644 --- a/backend/main.py +++ b/backend/main.py @@ -379,6 +379,7 @@ class SubtitleRemover: if __name__ == '__main__': + multiprocessing.freeze_support() multiprocessing.set_start_method("spawn") from backend.tools.args_handler import parse_args args = parse_args() diff --git a/gui.py b/gui.py index fffb63a..7a4714f 100644 --- a/gui.py +++ b/gui.py @@ -8,6 +8,14 @@ import sys import os + +# PyInstaller 打包后资源路径处理 +def resource_path(relative_path): + """获取资源文件的绝对路径(兼容 PyInstaller 打包)""" + if getattr(sys, 'frozen', False): + return os.path.join(sys._MEIPASS, relative_path) + return os.path.join(os.path.abspath(os.path.dirname(__file__)), relative_path) + import configparser import cv2 import multiprocessing @@ -42,7 +50,7 @@ class SubtitleExtractorGUI(FluentWindow): # self.themeListener.start() # 设置窗口图标 - self.setWindowIcon(QtGui.QIcon("design/vsr.ico")) + self.setWindowIcon(QtGui.QIcon(resource_path("design/vsr.ico"))) self.setWindowTitle(tr['SubtitleExtractorGUI']['Title'] + " v" + VERSION) # 创建界面布局 self._create_layout() @@ -162,6 +170,7 @@ class SubtitleExtractorGUI(FluentWindow): if __name__ == '__main__': + multiprocessing.freeze_support() multiprocessing.set_start_method("spawn") QApplication.setHighDpiScaleFactorRoundingPolicy( Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)