2013-06-03 1 views
2

저는 PySide로 작업 중이며 Qt 앱을 다시 시작하는 방법을 모색 중입니다. 이것은 파이썬에 의존합니까, 아니면 Qt가 제어해야합니까? ROSTYSLAV의 제안 벨로 BYQApplication을 다시 시작하는 올바른 방법은 무엇입니까?

:

class MyAppMainWindow(QMainWindow): 
    def __init__(self): 

     self.EXIT_CODE_REBOOT = -15123123 
     exit_code = self.EXIT_CODE_REBOOT 

    def slotReboot(self): 

     print "Performing application reboot.." 
     qApp.exit(self.EXIT_CODE_REBOOT) 

def main(): 
    currentExitCode = 0 
    app = QApplication(sys.argv) 
    ex = MyAppMainWindow() 

    while currentExitCode == ex.EXIT_CODE_REBOOT : 
     currentExitCode = app.exec_() 

     return currentExitCode 

if __name__ == '__main__': 
    main() 

는 분명 내가 완전히 이해하지 못했다. 반갑습니다.

답변

2

Qt Wiki이 응용 프로그램을 다시 시작할 수있게 만드는 좋은 방법이 있습니다. 접근법은 QApplication 인스턴스의 레크 리 에이션을 기반으로하며 현재 프로세스를 종료하지 않습니다. 그것은 쉽게 다음 조각처럼 PySide에 채택 될 수

보여줍니다 : 당신은 당신의 응용 프로그램을 마무리하기 전에 QApplication에 의해 presenteed API를 통해 설치 적절한 종료 코드에 필요

EXIT_CODE_REBOOT = -15123123 # you can use any unique value here 
exit_code = EXIT_CODE_REBOOT # Just for making cycle run for the first time 

while exit_code == EXIT_CODE_REBOOT: 
    exit_code = 0      # error code - no errors happened 
    app = QApplication(sys.argv) 
    ... 
    exit_code = app.exec() 

. 새 구성을 만들거나 새로운 응용 프로그램 인스턴스를 만들 때 필요한 구성을 연결할 수 있습니다.

+0

나는 편집 된 질문과 제안 된 코드를 사용하였습니다. 제발 그걸 보시오. – Alex

+0

@Alex, 당신은 'return currentExitCode'를 만들었습니다. 분명히, 첫 번째 반복 이후에 루프가 종료되는 동안 종료 코드가 무엇인지는 중요하지 않습니다 (이벤트가 나 빠지면'main' 함수가 끝납니다). while 루프에서 'return ...'행을 이동하십시오. –

1

주제가 상당히 오래되었지만 적절한 해결책이 제공되지 않습니다. 그래서 여기에 (Rostyslav Dzinko가 제안한 것을 토대로) :

EXIT_CODE_REBOOT = -11231351 

from PySide import QtGui, QtCore 
import sys 

class MyApp(QtGui.QMainWindow): 

    def __init__(self, parent=None):  
     super(MyApp, self).__init__(parent) 
    def restart (self):    
     #DO stuff before restarting here    
     return QtCore.QCoreApplication.exit(EXIT_CODE_REBOOT)    

def start_app(): 

    exit_code = 0 
    while True: 
     try: 
      app = QtGui.QApplication(sys.argv) 
     except RuntimeError: 
      app = QtCore.QCoreApplication.instance()    
     myap = MyApp() 
     myap.show()    
     exit_code = app.exec_()    
     if exit_code != EXIT_CODE_REBOOT: 
      break   
    return exit_code 


if __name__ == '__main__': 
    start_app() 
+0

재시작 방법을 호출하는 버튼을 추가하면 예제 스크립트가 좋을 것입니다. 또한, 어딘가에'import sys'가 필요합니다. – ekhumoro

관련 문제