有没有我曾与PyQt4的和Python 2.6创建的应用程序中使用下面的代码重新启动PyQt的应用QApplication
如何重新启动PyQt4的应用
的方式
app = QtGui.QApplication(sys.argv)
我已经在这里我设置的设置选项一些设置。现在,当我保存设置时,我需要重新加载应用程序,以便实现新的设置。无需最终用户退出并再次启动应用程序。
有没有我曾与PyQt4的和Python 2.6创建的应用程序中使用下面的代码重新启动PyQt的应用QApplication
如何重新启动PyQt4的应用
的方式
app = QtGui.QApplication(sys.argv)
我已经在这里我设置的设置选项一些设置。现在,当我保存设置时,我需要重新加载应用程序,以便实现新的设置。无需最终用户退出并再次启动应用程序。
编辑:改变的方式来获得应用程序的路径
你可以只启动一个新的进程,并退出你的,是这样的:(代码没有测试过,但是,this answer为主)
// 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的方法,甚至是一个功能,如果你不喜欢的子类
我解释我是如何做的:
我CRE吃了额外的一个文件main.py,它调用我的实际主程序文件dash.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_())
希望这是有帮助的! !
我有一个类似的问题,只是用这个在适当的地方:
subprocess.Popen([__file__])
sys.exit(0)
这是一个简单的应用程序,并且不需要任何进一步的论证。
这是我如何重启井字游戏PySide(它应该是相同的PyQt的):
我有一个单独的类 - 一个QWidget
类 - 在被编码的井字游戏。重新启动应用程序使用:
import subprocess
一个QPushButton()
像这样:
self.button = QPushButton("Restart", self)
的button
到Slot
连接:
self.buton.clicked.connect(self.restartGame)
的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
单班的人。
就我个人而言,我只是写它,以便它可以重新加载设置,而无需重新启动。但是这样做:在你的'__main__'中,使它捕捉程序的退出原因。如果它是'RESTART'(或类似的东西),重新启动应用程序(这是在一个循环obv),否则退出? – TyrantWave 2013-03-05 10:27:17