2011-03-31 8 views
2

PyQt4로 데스크톱 응용 프로그램을 쓰고 있는데 갑자기 종료 될 때 충돌이 시작되었습니다.Windows에서 PyQt4 응용 프로그램이 종료 될 때 종료됩니다.

코드를 모두 검토하여 충돌을 일으키지 않는 것이 재미 있었는지 확인했으며 코드에 문제가 있다고 생각하지 않습니다.

이전에 불만이 있었지만 이전 버전과 관련되어 있었고 사람들이 PyQt4를 최신 버전으로 업그레이드 할 것을 권고했기 때문에 문제가 해결되지 않았습니다.

그래서 내가 PyQt4로이 문제를 일으킬 수있는 것이 있는지 묻습니다. Qt를 정리하기 위해 종료 절차를 수행해야합니까?

+1

프로그램 내용을 모른 채 아무도이 문제에 답변 할 수 없습니다. –

+1

처음에는 충돌로 이어질 수있는 코드가 있어야합니다. 아무도 단서없이 질문에 대답 할 수는 없습니다. – winterTTr

+0

내 코드에는 특별한 것이 없습니다. .ui의 각 탭에서 노트북 탭과 테이블 뷰가있는 .ui를로드하고 실행하면 응용 프로그램이 종료 될 때 충돌이 발생할 수 있습니다. Qt 정리시 메모리를 해제 할 때 문제가있는 것 같습니다. –

답변

5

디버거는 이미 알고있는 것만 알려줍니다. 종료시 응용 프로그램이 충돌합니다.

닫힌 상태에서 결정적인 가비지 수집과 깨끗한 응용 프로그램 종료가 발생하는 활성 창을 설정해야 할 수도 있습니다. 이 작업을 수행하는 더 적절한 방법이 있지만 단순한, 아래의 예제 코드는 최소한의 코드 변경이 필요하며, 작성하고 작동하는 대화 상자 응용 프로그램을 기반으로합니다.

#The application 
app = QtGui.QApplication(sys.argv) 

#The main window 
MainWindow = QtGui.QMainWindow() 
app.setActiveWindow(MainWindow) #<---- This is what's probably missing 

#the ui 
ui = Ui_MainWindow() 
ui.setupUi(MainWindow) 

#start the application's exec loop, return the exit code to the OS 
exit(app.exec_()) 
+0

이것은 내가 PyQt 4.11.4와 함께 가지고 있었던 문제를 완벽하게 고쳤다. –

7

간단한 hello world 응용 프로그램 (20 개의 레이블이있는 QDialog)에서 동일한 문제가있었습니다. 이상하게도 10 개의 레이블로 문제가 사라집니다.

나는 다음과 같이 종료를 강제로 해결 :

def closeEvent(self, event): 
    exit() 

이 버추얼 박스에 파이썬 V2.7 (X32)에 대한 PyQt는의 v4.10.3와 Windows에서 발생합니다.

+0

감사합니다,이 작품은 나를 위해! 나는 PyQt 4.11 x86을 사용하고 있는데, 같은 문제가 생겼다. QDialog는 창을 닫을 때 충돌하기 시작한다. –

+0

이것은 PyQt 4.10.4 Anaconda x86에서 작동합니다. – addoil

관련 문제