Python 如何重新启动PyQt4应用程序
有没有办法重新启动PyQt应用程序Python 如何重新启动PyQt4应用程序,python,pyqt4,application-restart,Python,Pyqt4,Application Restart,有没有办法重新启动PyQt应用程序QApplication 我有一个使用pyqt4和Python2.6创建的应用程序,使用下面的代码 app=QtGui.QApplication(sys.argv) 我有设置选项,可以在其中设置一些设置。现在,当我保存设置时,我需要重新加载应用程序,以便新设置生效。无需最终用户退出并再次启动应用程序。编辑:更改获取应用程序路径的方式 您可以启动一个新流程并退出您的流程,类似这样:(代码未经测试,但基于) 将其编码为Qapplication的一种方法,甚至是一个函
QApplication
我有一个使用pyqt4和Python2.6创建的应用程序,使用下面的代码
app=QtGui.QApplication(sys.argv)
我有设置选项,可以在其中设置一些设置。现在,当我保存设置时,我需要重新加载应用程序,以便新设置生效。无需最终用户退出并再次启动应用程序。编辑:更改获取应用程序路径的方式 您可以启动一个新流程并退出您的流程,类似这样:(代码未经测试,但基于)
将其编码为Qapplication的一种方法,甚至是一个函数(如果您不想子类化)编辑:更改获取应用程序路径的方式 您可以启动一个新流程并退出您的流程,类似这样:(代码未经测试,但基于)
将其编码为Qapplication的一种方法,甚至是一个函数(如果您不想子类化)我解释了我是如何做到的: 我创建了一个额外的文件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_())
希望这是有帮助的 我解释我是如何做到的: 我创建了一个额外的文件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)
这是一个简单的应用程序,不需要任何进一步的参数。我有一个类似的问题,只是在适当的地方使用它:
subprocess.Popen([__file__])
sys.exit(0)
这是一个简单的应用程序,不需要任何进一步的参数。这就是我如何在PySide中重新启动TictaToe游戏(在PyQt中应该是相同的): 我有一个单独的类-a
QWidget
class-其中编码的是tictac-Toe游戏。要重新启动我使用的应用程序,请执行以下操作:
导入子流程
QPushButton()
:
self.button=QPushButton(“重启”,self)
按钮
与插槽
的连接:
self.buton.clicked.connect(self.restartGame)
插槽
,如下所示:
def重启游戏(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
单个类的人 这就是我如何在PySide中重新启动TictaToe游戏(在PyQt中应该是相同的):
我有一个单独的类-aQWidget
class-其中编码的是tictac-Toe游戏。要重新启动我使用的应用程序,请执行以下操作:
导入子流程
QPushButton()
:
self.button=QPushButton(“重启”,self)
按钮
与插槽
的连接:
self.buton.clicked.connect(self.restartGame)
插槽
,如下所示:
def重启游戏(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
单个类的人 就我个人而言,我只是编写它,这样它就可以在不需要重新启动的情况下重新加载设置。但是这样做:在您的\uuuu main\uuuu
中,使其捕获程序的退出原因。如果是重新启动
(或类似的内容),请重新启动应用程序(这是一个循环obv),否则退出?就我个人而言,我只需编写它,这样它就可以在不需要重新启动的情况下重新加载设置。但是这样做:在您的\uuuu main\uuuu
中,使其捕获程序的退出原因。如果是重新启动
(或类似操作),请重新启动应用程序(这是一个循环obv),否则退出?这将不起作用,因为使用PyQt时,QApplication.applicationFilePath()将返回python解释器的路径。@Jeannot哦,我不知道,我编辑了代码,使其使用操作系统
module@Fabio迪尼兹,我把我的应用程序作为一个单实例应用程序。因此,我无法启动同一应用程序的另一个实例。我想我不能使用这种方法。这不起作用,因为在PyQt中,QApplication.applicationFilePath()返回python解释器的路径。@Jeannot哦,我不知道,我编辑了代码,以便它使用os
module@FabioDiniz,我将我的应用程序作为一个单实例应用程序。因此,我无法启动同一应用程序的另一个实例。我想我不能用这种方法。