[pyQt5]pyqt 시작하기, Hello World
[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 재부팅을.. (쿨럭)