공돌이

[pyQt5]pyqt 시작하기, Hello World

누룽지82 2019. 3. 9. 03:44
728x90

[HelloWorld.py]

import sys
from PyQt5 import QtWidgets, uic
 
class Form(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()
        uic.loadUi('helloWorld.ui', self)
 
    # close event 처리
    def closeEvent(self, QCloseEvent):
        print("Enter CloseEvent")
        self.deleteLater()
        QCloseEvent.accept()
 
def main():
    app = QtWidgets.QApplication(sys.argv)
    w = Form()
    w.show()
    sys.exit(app.exec_())
 
if __name__ == '__main__':
    main()

 

[helloWorld.ui]

 

 

[결과]

 

 

 

[참고 1]

첨엔 아래처럼 코드를 짰다.

 

import sys
from PyQt5 import QtWidgets, uic



class Form(QtWidgets.QDialog):
def __init__(self):
super().__init__()
self.ui = uic.loadUi("helloWorld.ui") # get ui file
#uic.loadUi('helloWorld.ui', self)
self.ui.show()


# close event 처리
def closeEvent(self, QCloseEvent):
print("Enter CloseEvent")
self.deleteLater()
QCloseEvent.accept()


def main():
app = QtWidgets.QApplication(sys.argv)
w = Form()
# w.show()
sys.exit(app.exec_())


if __name__ == '__main__':
main()

 

그런데 이렇게 하면, Window 창 종료 시 closeEvent() 가 호출이 안된다.

 

웹 검색 해보니, 이렇게 하면 window 창은 'w' 가 아닌, 'w' 안의 'ui' 라는 instance이므로,

window 창이 닫힌다고 'w'의 CloseEvent() 가 호출되지 않는다고 한다.

그리고, init 호출에서 window 창을 여는 것보다는,

init에서 초기화만 수행하고, main에서 'w.show()' 로 window 창 여는 것을 추천한다고 한다.

 

링크: https://stackoverflow.com/questions/14834494/pyqt-clicking-x-doesnt-trigger-closeevent

 

 

[참고 2]

pyqt5를 오래 전에 깔고, 'pycharm' 이 python IDE로 많이 사용한다고 하길래 phcharm 설치하고 위와 같이 코드를 짰었다. 근데 결과가 window 창은 잘 나오는데 window 창 닫으면 아래와 같은 에러 표시가 ㄷㄷㄷㄷㄷ

 

 

이거 원인 찾아본답시고 여기저기 검색하느라 1시간 반 넘게 고생했다. 결과는 노답;;

포기하고 PC 껐다가 오늘 다시 해본다고 실행했는데 위 에러가 나오지 않는다;;;;;;;;;;;;;;;;;

 

왠지 pycharm 설치하면서 먼가 꼬인 거 같다는 의심을 지울 수가 없다. 물론 이것저것 해본다고 실행하던 게 문제가 되어 PC 재부팅 해야지만 해결된 걸 수도 있고...

 

아무튼 위 에러가 나오는 경우, 일단 PC 재부팅을.. (쿨럭)

 

 

반응형