有沒有我曾與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