파이썬에서 PyQt5를 이용해서 GUI를 구성한 코딩을 할 때 창이 닫히는 순간 특정 이벤트를 실행하게 할 수 있습니다.
예를 들어 창이 닫힐 때 "정말 닫을건가요?" 라고 묻는 팝업 창을 띄울 수 있습니다.
PyQt5.QtWidgets의 closeEvent 메소드를 오버라이드 하는 방법입니다.
파이참 IDE환경에서 Ctrl + B를 누르면 Import한 클래스나 함수에서 정의하고 있는 코드로 들어갈 수 있습니다.
아래 코드에서 메인윈도우가 상속받고 있는 Q메인윈도우에 커서를 올리고 Ctrl + B를 누르면 Q메인윈도우의 소스코드로 접근할 수 있습니다.
Q메인윈도우 안에 closeEvent라는 함수가 있는데요,
해당 함수는 비어있지만 오버라이딩 해서 특정한 기능을 심어놓으면 창이 종료될 때 실행되게 됩니다.
def closeEvent(self, *args, **kwargs): # real signature unknown
pass
비어있는 closeEvent에 내용을 채워주면,
GUI 창 종료시 채워준 내용이 실행되게 되는 것이지요.
밑의 예제 코드블럭에서 def closeEvent 는 MainWindow가 받고있는 QMainWindow의 동일한 이름의 메소드를 오버라이딩 합니다. 오버라이딩된 함수의 경우 IDE마다 다르긴 하지만 좌측에 디스크모양 등으로 표시를 해주는게 일반적입니다.
from PyQt5.QtWidgets import *
class MainWindow(QMainWindow, form_class):
class MainWindow(QMainWindow, form_class):
def __init__(self, data_queue, order_queue, realtime_queue):
super().__init__()
self.setupUi(self)
self.kw = Kiwoom(data_queue, order_queue, realtime_queue)
def closeEvent(self, event):
quit_msg = "Want to exit?"
reply = QMessageBox.question(self, 'Message', quit_msg, QMessageBox.Yes, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
코딩할 때 자주 참조하게 되는,
스택오버플로우에서 참조한 내용을 링크해둡니다.
https://stackoverflow.com/questions/1414781/prompt-on-exit-in-pyqt-application
Prompt on exit in PyQt application
Is there any way to promt user to exit the gui-program written in Python? Something like "Are you sure you want to exit the program?" I'm using PyQt.
stackoverflow.com

'컴퓨터, IT > 프로그래밍' 카테고리의 다른 글
[파이썬] 멀티쓰레드 오류없이 종료하기 (QThread + GUI) (2) | 2021.07.04 |
---|---|
(안드로이드 앱 출시) 구글 앱 개발자 계정등록 (25$) (0) | 2021.07.03 |
(파이썬) Pandas DataReader로 야후 스크랩핑 에러해결 (DataFrame 열이름 변경) (0) | 2021.07.01 |
[파이썬] 키움 API로 전종목 일봉 요청하기 (0) | 2021.06.30 |
(파이썬) 키움 API "에러코드표" 및 "장운영구분 FID215" 딕셔너리 선언문 (0) | 2021.06.20 |