如何重新启动PyQt4的应用(How to Restart PyQt4 Application)

2019-10-17 18:42发布

有没有办法重新启动PyQt的应用程序QApplication

我有PyQt4的和Python 2.6使用下面的代码创建的应用程序

app = QtGui.QApplication(sys.argv)

我有在那里我设置一些设置,设置选项。 现在,当我保存设置,我需要重新加载,使新的设置生效的应用程序。 无需最终用户的退出并重新启动应用程序。

Answer 1:

我有一个类似的问题,只是用这个在适当的位置:

subprocess.Popen([__file__])
sys.exit(0)

这是一个简单的应用程序,并且不需要任何进一步的论证。



Answer 2:

我解释我是如何做的:

我创建这就要求我的实际主程序文件dash.py.一个额外的一个文件main.py 我发出一个信号,用以重新启动(在我的closeEvent程序自动更新),所以我需要发出信号吧。 这是片段希望这会帮助你。

这一个是在dash.py我的主程序文件

def restart(self):
    # create a signal equivalent to "void someSignal(int, QWidget)"
    self.emit(QtCore.SIGNAL("RESTARTREQUIRED"), True)

这一次在main.py只调用实际的程序,并重新启动应用程序

import sys
from PyQt4 import QtGui,QtCore
from bin import dash

if __name__ == "__main__":
    application = QtGui.QApplication(sys.argv)
    uDesk = dash.app()
    uDesk.show()
    uDesk.actionRestart.triggered.disconnect()
    # define restart slot
    @QtCore.pyqtSlot()
    def restartSlot():
        print 'Restarting app'
        global uDesk
        uDesk.deleteLater()
        uDesk = dash.app()
        uDesk.show()
        uDesk.actionRestart.triggered.disconnect()   
        uDesk.actionRestart.triggered.connect(restartSlot)
        print 'New app started !'

    QtCore.QObject.connect(uDesk,
                   QtCore.SIGNAL("RESTARTREQUIRED"),
                   restartSlot)
    uDesk.actionRestart.triggered.connect(restartSlot)
    sys.exit(application.exec_()) 

希望这是有帮助的!



Answer 3:

编辑:更改为获取应用程序路径的方式

你可以只启动一个新的进程,并退出你的,是这样的:(代码没有测试过,但基于这个答案 )

// Restart Application
def restart(self, abort):
    // Spawn a new instance of myApplication:
    proc = QProcess()
    //proc.start(self.applicationFilePath());
    import os
    proc.start(os.path.abspath(__file__))

    self.exit(0);

代码它作为您的QApplication的方法,或者即使你不喜欢的子类的函数



Answer 4:

这就是我如何重启PySide井字游戏(它应该是在PyQt的相同):

我有一个单独的类-一个QWidget类-其中编码井字游戏。 要重新启动我使用的应用程序:

  1. import subprocess

  2. 一个QPushButton()如下所示:

    self.button = QPushButton("Restart", self)

  3. 在的连接buttonSlot

    self.buton.clicked.connect(self.restartGame)

  4. Slot此按钮,如下所示:

    def restartGame(self): self.close() subprocess.call("python" + " TicTAcToe.py", shell=True)

所有这些都在同 - 单 - 类。 以及这些做:关闭游戏的活动窗口,并创建一个新的。

如何代码在井字游戏类:

import subprocess
class TicTacToe(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.button = QPushButton("Restart", self)
        self.buton.clicked.connect(self.restartGame)
    def restartGame(self):
        self.close()
        subprocess.call("python" + " TicTacToe.py", shell=True)

def main():
    app = QApplication(sys.argv)
    widget = TicTacToe()
    widget.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

编辑

我知道这并不能回答这个问题(它不重新启动QApplication ),但我希望这可以帮助那些谁想要重新启动他们的QWidget单一类。



文章来源: How to Restart PyQt4 Application