PyQt アプリケーションを再起動する方法はありますかQApplication
以下のコードを使用してpyqt4とpython 2.6で作成されたアプリがあります
app = QtGui.QApplication(sys.argv)
いくつかの設定を行う設定オプションがあります。設定を保存したら、新しい設定が有効になるようにアプリケーションをリロードする必要があります。エンド ユーザーがアプリを終了して再度起動する必要はありません。
PyQt アプリケーションを再起動する方法はありますかQApplication
以下のコードを使用してpyqt4とpython 2.6で作成されたアプリがあります
app = QtGui.QApplication(sys.argv)
いくつかの設定を行う設定オプションがあります。設定を保存したら、新しい設定が有効になるようにアプリケーションをリロードする必要があります。エンド ユーザーがアプリを終了して再度起動する必要はありません。
私がそれをした方法を説明します:
実際のメイン プログラム ファイル dash.py を呼び出す追加の 1 つのファイル 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_())
これが役に立ったことを願っています!!
これは、 PySideで TicTacToe ゲームを再起動する方法です( PyQtでも同じである必要があります)。
Tic Tac Toeゲーム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)
これらはすべて同じ - シングル - クラスにあります。これらが何をするか: ゲームのアクティブなウィンドウを閉じて、新しいウィンドウを作成します。
このコードが TicTacToe クラスでどのように見えるか:
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 のメソッドまたは関数としてコーディングします。