有没有办法重新启动 PyQt 应用程序QApplication
我使用以下代码使用 pyqt4 和 python 2.6 创建了一个应用程序
app = QtGui.QApplication(sys.argv)
我有设置选项,我在其中设置了一些设置。现在,当我保存设置时,我需要重新加载应用程序以便新设置生效。无需最终用户退出并再次启动应用程序。
有没有办法重新启动 PyQt 应用程序QApplication
我使用以下代码使用 pyqt4 和 python 2.6 创建了一个应用程序
app = QtGui.QApplication(sys.argv)
我有设置选项,我在其中设置了一些设置。现在,当我保存设置时,我需要重新加载应用程序以便新设置生效。无需最终用户退出并再次启动应用程序。
我有一个类似的问题,只是在适当的地方使用它:
subprocess.Popen([__file__])
sys.exit(0)
这是一个简单的应用程序,不需要任何进一步的参数。
我解释了我是如何做到的:
我创建了一个额外的文件 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_())
希望这有帮助!
这就是我在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()
编辑
我知道这不能回答问题(它不会重新启动 a QApplication
),但我希望这可以帮助那些想要重新开始QWidget
单节课的人。
编辑:更改获取应用程序路径的方式
您可以开始一个新流程并退出您的流程,如下所示:(代码未测试,但基于此答案)
// 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 的方法甚至函数