欧陆风云4 存档管理器开发小记

近日在玩欧陆风云 4,为了完成成就,所以选择了铁人模式,由于是新手+铁人模式不能自由存档(新存档会覆盖旧存档),容错率较低,故考虑开发一个工具来管理存档,将新的存档备份起来,以便需要时读取。

第一版是使用 Node.js 实现的,通过 setInterval 定时备份存档文件。这种做法有些缺陷:

  • 没有 GUI,每次需要手动在 cmd 下执行
  • 不能监听存档文件的变动,手动保存的存档不一定会被备份
  • 会生成很多重复的文件
  • 不好查看备份操作的记录

于是考虑开发一个 GUI 应用,希望它具有以下能力

  • 跨平台(欧陆风云 4 支持 Windows/Linux/Mac)
  • 能够选择存档目录
  • 能够监听文件变动(做保存操作时能够触发,将新的存档备份)
  • 能够展示备份操作记录
  • 能力强大可扩展(为后续开发提供空间)

综合考虑后,决定使用 Python + PyQt 开发。

UI 绘制:

使用 Qt Designer 生成 .ui 文件,通过 pyside2-uic 将 .ui 文件编译成 .py 文件,在 MainWindow 中引入:

from ui.MainWindow import Ui_MainWindow

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

Windows 系统下 QDialog 窗口右上角有问号按钮:

app.setAttribute(Qt.AA_DisableWindowContextHelpButton)

应用打包:

使用 pyinstaller 打包,在 Windows 和 Mac 环境下,生成文件大小约为 30-50MB,使用 UPX+生成单文件的情况下可以大幅缩小文件尺寸。

后续计划:

  • 构建
    • 完善图标、bundle identifier 等信息
    • 使用 GitHub Actions 自动调用 pyinstaller 完成构建
  • 功能
    • 检查文件 hash,避免生成重复备份
    • 展示备份操作记录(时间列+文件名列)
    • 从存档中解析出国家、时间信息,在管理器界面展示

项目地址:https://github.com/hanai/eu4-save-manager