3

我正在使用 PySide,并正在寻找一种方法来重新启动我的 Qt 应用程序。这取决于python,还是必须由Qt控制?

罗斯蒂斯拉夫的建议如下:

class MyAppMainWindow(QMainWindow):
    def __init__(self):

        self.EXIT_CODE_REBOOT = -15123123
        exit_code = self.EXIT_CODE_REBOOT

    def slotReboot(self):

        print "Performing application reboot.."
        qApp.exit( self.EXIT_CODE_REBOOT )

def main():
    currentExitCode = 0
    app = QApplication(sys.argv)
    ex = MyAppMainWindow()

    while currentExitCode == ex.EXIT_CODE_REBOOT :
        currentExitCode = app.exec_()

        return currentExitCode

if __name__ == '__main__':
    main()

显然我没有完全理解。请帮忙。

4

2 回答 2

3

这个话题很老了,但我看到没有提供合适的解决方案。所以这里是(根据 Rostyslav Dzinko 的建议):

EXIT_CODE_REBOOT = -11231351

from PySide import QtGui, QtCore
import sys

class MyApp(QtGui.QMainWindow):

    def __init__(self, parent=None):       
        super(MyApp, self).__init__(parent)
    def restart (self):            
        #DO stuff before restarting here            
        return QtCore.QCoreApplication.exit( EXIT_CODE_REBOOT )            

def start_app():

    exit_code = 0
    while True:
        try:
            app = QtGui.QApplication(sys.argv)
        except RuntimeError:
            app = QtCore.QCoreApplication.instance()            
        myap = MyApp()
        myap.show()            
        exit_code = app.exec_()            
        if exit_code != EXIT_CODE_REBOOT:
            break        
    return exit_code


if __name__ == '__main__':
    start_app()
于 2015-01-16T14:58:57.373 回答
3

Qt Wiki提供了一种很好的方法来让您的应用程序可重新启动。该方法基于QApplication实例的重新创建而不是终止当前进程。

它可以很容易地被 PySide 采用,如下一个片段所示:

EXIT_CODE_REBOOT = -15123123 # you can use any unique value here
exit_code = EXIT_CODE_REBOOT # Just for making cycle run for the first time

while exit_code == EXIT_CODE_REBOOT:
    exit_code = 0                       # error code - no errors happened
    app = QApplication(sys.argv)
    ...
    exit_code = app.exec() 

您只需要QApplication在完成您的应用程序之前通过提供的 API 设置正确的退出代码。您可以在创建新的应用程序实例时连接新配置或任何您需要的东西。

于 2013-06-03T10:09:22.953 回答