Python 如何重新启动PyQt5应用程序

Python 如何重新启动PyQt5应用程序,python,pyqt,pyqt5,pyqt4,Python,Pyqt,Pyqt5,Pyqt4,我正在尝试在客户端更新后重新启动应用程序。我能够实现直到自动更新部分。我试图浏览如何重新启动PyQt应用程序?。前面很少有类似的问题,但是没有一个有很好的解释或者按钮点击事件的例子。你们能帮我了解一下如何重新启动PyQt应用程序吗。基本上,每次有更新时,我都想从重新启动应用程序 注意:AppLogin是我为处理应用程序登录而创建的专用模块。因此,基本上,一旦应用程序打开,就会出现登录QDialog from PyQt5.QtWidgets import * import sys import A

我正在尝试在客户端更新后重新启动应用程序。我能够实现直到自动更新部分。我试图浏览如何重新启动PyQt应用程序?。前面很少有类似的问题,但是没有一个有很好的解释或者按钮点击事件的例子。你们能帮我了解一下如何重新启动PyQt应用程序吗。基本上,每次有更新时,我都想从
重新启动应用程序

注意:
AppLogin
是我为处理应用程序登录而创建的专用模块。因此,基本上,一旦应用程序打开,就会出现登录
QDialog

from PyQt5.QtWidgets import *
import sys
import AppLogin

class App:
    def __init__(self):
        btn = QPushButton(main_window)
        btn.setText('close')
        btn.pressed.connect(self.restart)
        main_window.show()

    def restart(self):
        # Here goes the code for restart
        pass


if __name__ == '__main__':
    appctxt = QApplication(sys.argv)
    log_in = AppLogin.Login()
    if log_in.exec_() == QDialog.Accepted:
        main_window = QMainWindow()
        ui = App()
        exit_code = appctxt.exec_()
        sys.exit(exit_code)

逻辑是结束eventloop并在关闭前立即启动应用程序:

import sys
from PyQt5 import QtCore, QtWidgets


def restart():
    QtCore.QCoreApplication.quit()
    status = QtCore.QProcess.startDetached(sys.executable, sys.argv)
    print(status)


def main():
    app = QtWidgets.QApplication(sys.argv)

    print("[PID]:", QtCore.QCoreApplication.applicationPid())

    window = QtWidgets.QMainWindow()
    window.show()

    button = QtWidgets.QPushButton("Restart")
    button.clicked.connect(restart)

    window.setCentralWidget(button)

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
解决方案是关闭(或忘记)QMainWindow并重新创建它

如果您只是“show()”一个小部件,同样的想法也可以

import sys
import uuid

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton


class MainWindow(QMainWindow):
    singleton: 'MainWindow' = None

    def __init__(self):
        super().__init__()
        btn = QPushButton(f'RESTART\n{uuid.uuid4()}')
        btn.clicked.connect(MainWindow.restart)
        self.setCentralWidget(btn)
        self.show()

    @staticmethod
    def restart():
        MainWindow.singleton = MainWindow()


def main():
    app = QApplication([])
    MainWindow.restart()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

非常感谢您的确认,我尝试了代码示例。它只是停止应用程序,而不是重新启动应用程序。仅供参考-我在Windows@testuserme如何运行应用程序?你使用IDE吗?尝试从控制台启动脚本