1

PyQt アプリケーションを再起動する方法はありますかQApplication

以下のコードを使用してpyqt4とpython 2.6で作成されたアプリがあります

app = QtGui.QApplication(sys.argv)

いくつかの設定を行う設定オプションがあります。設定を保存したら、新しい設定が有効になるようにアプリケーションをリロードする必要があります。エンド ユーザーがアプリを終了して再度起動する必要はありません。

4

4 に答える 4

2

私がそれをした方法を説明します:

実際のメイン プログラム ファイル 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_()) 

これが役に立ったことを願っています!!

于 2013-03-29T09:09:55.713 に答える
0

これは、 PySideで TicTacToe ゲームを再起動する方法です( PyQtでも同じである必要があります)。

Tic Tac ToeゲームQWidgetがコーディングされている単一のクラス (クラス) があります。私が使用するアプリケーションを再起動するには:

  1. import subprocess

  2. QPushButton()ように:

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

  3. buttonへの接続Slot:

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

  4. 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

于 2014-07-17T12:14:37.840 に答える
0

編集:アプリケーションパスを取得する方法を変更する

次のように、新しいプロセスを開始して終了することができます:(コードはテストされていませんが、この回答に基づいています)

// 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 のメソッドまたは関数としてコーディングします。

于 2013-03-05T10:52:59.063 に答える