Restart/Theme PyQt5 应用程序的开关功能

Restart/Theme Switch Feature for PyQt5 Application

我实现了主题切换功能,使用subprocess重新启动应用程序并发送一个sys变量指示所需的主题,以便主控制器可以知道要申请哪些样式应用程序组件。

styles_controller.py

def switch_theme(app):
    app.quit()
    if (not dark_mode):
        subprocess.Popen(['python', 'main.py', 'dark'])
    else:
        subprocess.Popen(['python', 'mainp.py', 'light'])

目前,这个实现可以正常工作,但我的问题是,如果 我为应用程序创建了一个可执行文件,这个实现是否可以在 Windows 和 Linux 上工作,甚至可以工作吗?有哪些更好的方法?

将脚本转换为可执行文件时,不必将“python”用作程序,而是可执行文件本身,也不需要脚本。所以你必须区分它是可执行文件还是脚本,如果是 pyinstaller,你必须使用 sys.frozen 属性。综合以上,解决办法是:

def switch_theme(theme):
    args = [sys.executable]
    if not getattr(sys, "frozen", False):
        args.append("main.py")
    args.append(theme)
    subprocess.Popen(args)


def restart():
    QCoreApplication.quit()
    switch_theme("dark" if dark_mode else "light")