가끔 윈도우 프로그램에서 상단의 종료버튼을 누르면, 그때 한번 더 확인할 필요가 있을 때가 있다.
이게 알면 간단한데, 모르면 어떻게 구현해야 하나? 하는 막막한 기능이다.
그러니, 먼저 챗지피티에게 종료여부 확인 기능에 대해서 물어보자.
그랬더니 아래와 같은 코드를 알려준다.
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox
class MainWindow(QMainWindow):
def closeEvent(self, event):
reply = QMessageBox.question(self, "종료 확인", "정말로 종료하시겠습니까?",
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept() # 종료 허용
else:
event.ignore() # 종료 취소
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.setWindowTitle("종료 확인 예제")
window.resize(400, 300)
window.show()
sys.exit(app.exec())
흠.. 언제나 그렇지만, 한번 실제로 잘 되는지 확인해보자.
실제 파일을 만들고, 실행해보면 아래와 같은 창이 생성된다.
우측 상단에 종료버튼을 누르면!!!
윈도우 종료버튼을 누르면, 다시 한번 종료확인을 하는 창이 뜬다.
코드를 다시 한번 자세히 보자.
위 기능의 핵심은 closeEvent()를 override 해서 event를 받아온 후, QMessageBox를 이용해서 확인 창을 띄우고, 그 확인창의 reply를 받아와서 그 값에 다라서 event.accept() 와 event.ignore()를 수행하는 것이다.
def closeEvent(self, event):
reply = QMessageBox.question(self, "종료 확인", "정말로 종료하시겠습니까?",
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept() # 종료 허용
else:
event.ignore() # 종료 취소
어찌보면 간단한 기능인데, 이거 생각보다 구글에서 쌩으로 검색하려면 쉽게 안나온다.
쳇지피티야, 오늘도 수고했어!!
그럼 여기까지... 이지만, 살짝 사족을 붙이면,
사실 원래 하려던 것은, 그래프를 그리고, 메인 윈도우를 종료할 때 종료여부를 다시 한번 확인하는 기능이었다. 그래서 처음에는 아래처럼 물어봤었다.
그랬더니 쳇지피티는 아래처럼 잘 알려주었다.
그리고 이때의 코드는 아래와 같이 알려주었다.
import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QMessageBox
import pyqtgraph as pg
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("PySide6 + pyqtgraph Example")
self.setGeometry(100, 100, 800, 600)
# pyqtgraph PlotWidget 추가
self.plot_widget = pg.PlotWidget()
self.setCentralWidget(self.plot_widget)
self.plot_example()
def plot_example(self):
x = list(range(100))
y = [i**0.5 for i in x] # 간단한 제곱근 그래프
self.plot_widget.plot(x, y, pen=pg.mkPen(color='b', width=2))
def closeEvent(self, event):
reply = QMessageBox.question(self, '종료 확인', '정말 종료하시겠습니까?',
QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
그런데 코드를 자세히 보니... PySide6 와 PyQtGraph부분이 분리되어 있다. 즉, PySide6 부분에서 윈도우 창을 관리하고 pyqtgraph 에서는 그래프를 그리는 역할만 하도록 되어 있다. 그말은 PySide6와 PyQtGraph 가 같이 있을 필요가 없다는 말이다.
그래서 질문자체를 PyQtGraph 를 빼고, 'PySide6 에서 윈도우 ~~~' 형태로 바꾸었다.
이 부분의 요지는, 쳇지피티에게 약간 질문을 이상하게 물어봐도 잘 엮어서 대답을 해준다는 것이다. 다만, 답변에서 정말 중요한 부분을 뽑아내는 것은 본인의 능력이라고 볼 수 있다.
모두들 쳇지피티도 잘 활용하고, 동시에 본인의 능력도 그와 함께 향상시키길 바란다.
그럼 진짜 이만~~
'Python' 카테고리의 다른 글
실시간 시스템에 파이썬 사용 가능성 (0) | 2025.05.11 |
---|---|
파이썬 GUI 라이브러리 5가지 (0) | 2025.04.29 |
색깔 변경하며 그래프 그리기 (PySide6, PyQtGraph) (0) | 2025.03.15 |
평면에서 일정 영역 진입/진출 확인하기 (0) | 2025.03.11 |
Protobuf 를 쉽게 사용해보자 (2/2) (0) | 2025.03.08 |