如何重启 PyQt5 应用程序
How to reboot PyQt5 application
我正在尝试在客户端更新后重新启动我的应用程序。我能够实现直到自动更新部分。我尝试浏览 How to restart PyQt application?。之前有几个类似的问题,但其中 none 个有很好的解释或带有按钮单击事件的示例。你们能帮我了解如何重启 PyQt 应用程序吗?基本上我想在每次有更新时从 if __name__ == '__main__':
重新启动应用程序。
注意: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 并重新创建它。
如果您只是“显示()”一个小部件,同样的想法也很有效。
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()
我正在尝试在客户端更新后重新启动我的应用程序。我能够实现直到自动更新部分。我尝试浏览 How to restart PyQt application?。之前有几个类似的问题,但其中 none 个有很好的解释或带有按钮单击事件的示例。你们能帮我了解如何重启 PyQt 应用程序吗?基本上我想在每次有更新时从 if __name__ == '__main__':
重新启动应用程序。
注意: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 并重新创建它。
如果您只是“显示()”一个小部件,同样的想法也很有效。
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()