【问题标题】:Restart/Theme Switch Feature for PyQt5 ApplicationPyQt5 应用程序的重启/主题切换功能
【发布时间】:2021-02-21 00:54:14
【问题描述】:

我实现了一个主题切换功能,它使用 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 pyqt5 desktop-application pyside2


    【解决方案1】:

    将脚本转换为可执行文件时,不必使用“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")
    

    【讨论】:

    • 感谢您的回答。这是否意味着在可执行文件的情况下,我应该将 main.py 替换为 .exe 文件?
    • @on98 不,当您使用 .py 时,可执行文件是 python:python your_script.py dark,但是当您将其转换为可执行文件时,相同的应用程序是可执行文件:your_executable dark
    • 感谢您的回答
    猜你喜欢
    • 2020-10-17
    • 2012-11-04
    • 2017-05-08
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2020-10-13
    相关资源
    最近更新 更多