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")
我实现了主题切换功能,使用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")