다이얼로그를 띄운 상태에서 해당 다이얼로그를 띄우는 버튼을 누르면 중복되서 띄워지는 현상이 발생했다.. -_-;; 그래서 혼자 예외처리를 한 결과..
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' 카테고리의 다른 글
# 3. [Utils] QCheckBoxUtils (0) | 2021.08.04 |
---|---|
# 2. [Util] QTableWidgetUtils (0) | 2021.05.06 |
# 1. QSplitter (0) | 2021.05.06 |
댓글