closeEvent

2020. 12. 28. 17:26·[Framework] - PyQT

다이얼로그를 띄운 상태에서 해당 다이얼로그를 띄우는 버튼을 누르면 중복되서 띄워지는 현상이 발생했다.. -_-;; 그래서 혼자 예외처리를 한 결과..

 

if not self.dialog_legend:
    DialogLegend(....)

다이얼로그 객체가 존재하지 않은 경우에만 띄우도록 예외처리를 했다. 그랬더니 문제가 발생했다.

 

중복되는 현상은 방지할 수 있었지만, 창을 닫고나서 두 번째부터 창을 띄울 수 없게 된 것이다. 이는 다이얼로그 객체가 남아있게 때문에 해당 조건문을 만족시키지 않기 때문이었다. 그렇다면 해당 객체를 없애냐? 그렇게 되면 이벤트가 발생하지 않는 좀비상태로 빠져버리고 말것이다..

 

그 순간! 옆에 계신 선배님이 팁을 주셨다. closeEvent 

 

class DialogLegend(QDialog, FORM_CLASS, ):

    def __init__(self, ...):
        ...
        self.isClosed = False // 닫힌 여부를 판단하는 플래그 선언
        ...
        
    def closeEvent(self, e) -> None:
        self.isClosed = True
        e.accept()

QDialog 클래스를 보면 닫힐 때 이벤트를 정의할 수 있다. 이를 통해 플래그를 True로 변경하고 밖에서 이를 참조하면 된다. 

 

# 최초 실행할 때가 아닐 때
if self.dialog_legend:
  if not self.dialog_legend.isClosed:
  	return self.dialog_legend.showNormal()

# 최초 실행시
self.dialog_legend = DialogLegend(...)

여기서 showNormal은 QWidgets 클래스의 메소드이다. 최초 실행시 self.dialog_legend 인스턴스는 None이 아니게 된다. 그 다음부터는 위에 있는 조건문을 타면서 isClosed를 참조하며 창이 닫혀있는지 여부를 판단하고 showNormal을 호출하게 된다. (크기에 따라 다양하게 show를 할 수 있다.)

'[Framework] - PyQT' 카테고리의 다른 글

[Utils] QCheckBoxUtils  (0) 2021.08.04
[Util] QTableWidgetUtils  (0) 2021.05.06
QSplitter  (0) 2021.05.06
'[Framework] - PyQT' 카테고리의 다른 글
  • [Utils] QCheckBoxUtils
  • [Util] QTableWidgetUtils
  • QSplitter
Bebsae
Bebsae
  • Bebsae
    뱁새zip
    Bebsae
  • 전체
    오늘
    어제
    • 분류 전체보기 (108)
      • [DevOps] - Kubernetes (5)
      • [DevOps] - AWS (1)
      • [AI] - Machine Learning (19)
      • [AI] - Neural Network (7)
      • [CS] - Network (2)
      • [CS] - Data Structure (3)
      • [CS] - Design Pattern (6)
      • [Language] - Python (15)
      • [Library] - Numpy (7)
        • Quick Start (5)
        • API (2)
      • [Framework] - Django (3)
      • [Framework] - QGIS (6)
      • [Framework] - PyQT (4)
      • [Mathematics] - Linear Alge.. (14)
      • [Mathematics] - Statistical (2)
      • [ETC] - Python (3)
      • [ETC] - C++ (1)
      • [ETC] - Linux (1)
      • 논문 (5)
      • 회고록 (3)
      • 생산성 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    numpy
    RNN
    선형대수
    Convolution
    Linear
    파이썬
    Python
    DEEPLEARNING
    algebra
    머신러닝
    Machine
    MachineLearning
    신경망
    decomposition
    Learning
    교차검증
    QGIS
    linearalgebra
    디자인패턴
    분해
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Bebsae
closeEvent
상단으로

티스토리툴바