【问题标题】:How to restart kivy app after updating (exit old version & execute new version)更新后如何重新启动kivy应用程序(退出旧版本并执行新版本)
【发布时间】:2020-09-13 02:42:25
【问题描述】:

下载新版本后如何让 kivy 应用重新启动?

我正在开发一个使用 kivy 框架的 python GUI 应用程序,我刚刚向我的应用程序添加了一个自动更新功能,可以安全地下载、验证和提取自身的更新版本。完成这些升级步骤后,我会向用户显示一个模式对话框,要求他们单击按钮以将应用重新启动到较新版本。

如何让该按钮真正关闭窗口并执行新的 kivy 应用程序?

【问题讨论】:

    标签: python python-3.x kivy exec execv


    【解决方案1】:

    在python中,可以使用os.execv()退出当前进程,替换为另一个执行。

    以下命令演示了如何在 Debian 10 中使用 kivy 执行此操作:

    sudo apt-get -y install python3 python3-pip python3-virtualenv python3-setuptools
    sudo dpkg -l | grep python
    
    python3 -m virtualenv --python=python3.7 /tmp/virtualenv/kivy_test
    /tmp/virtualenv/kivy_test/bin/python3 -m pip install --upgrade pip kivy
    /tmp/virtualenv/kivy_test/bin/python3 -m pip list
    source /tmp/virtualenv/kivy_test/bin/activate
    
    tmpDir=`mktemp -d`
    pushd "${tmpDir}"
    
    cat << EOF > helloWorldOne.py
    #!/usr/bin/env python3
    import kivy, os
    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.clock import Clock
    
    class MyApp(App):
        def build(self):
            Clock.schedule_once( self.restart, 1 )
            return Label(text='Hello World One!')
    
        def restart(self, dt):
            os.execv( 'helloWorldTwo.py', ['helloWorldTwo.py'] )
    
    if __name__ == '__main__':
        MyApp().run()
    EOF
    
    cat << EOF > helloWorldTwo.py
    #!/usr/bin/env python3
    import kivy, os
    from kivy.app import App
    from kivy.uix.label import Label
    from kivy.clock import Clock
    
    class MyApp(App):
        def build(self):
            return Label(text='Hello World Two!')
    
    if __name__ == '__main__':
        MyApp().run()
    EOF
    
    chmod +x helloWorld*.py
    ./helloWorldOne.py
    
    popd
    

    当上面执行./helloWorldOne.py 时,会出现一个窗口(“旧版本”)。 1 秒延迟后,restart() 函数被执行(它可以被绑定到一个按钮)——它调用os.execv()

    helloWorldOne.py 应用程序窗口已关闭并替换为helloWorldTwo.py 应用程序窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多