상세 컨텐츠

본문 제목

[PySide6] QDialog 창 with Modal/Modaless

pyside6

by 빨간눈동자 2021. 9. 1. 11:58

본문

반응형

Modal :  Dialog가 활성화된 후 닫을 때까지 다른 작업을 수행할 수 없는 다이얼 로그. exec()로 수행

Modaless : Dialog가 떠있는 상태에서 다른 작업을 할 수 있는 다이얼로그. show()로 수행

 

느낌이 오지 않을 때는 예제 보자.. 

# Modal Dialog 

import sys
#from PySide6.QtCore import QSize, Qt
from PySide6.QtWidgets import QWidget, QDialog, QApplication, QPushButton

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        button = QPushButton('Open Dialog', self)
        button.clicked.connect(self.handleOpenDialog)
        self.resize(300, 200)
        self._dialog = None

    def handleOpenDialog(self):
        if self._dialog is None:
            self._dialog = QDialog(self)
            self._dialog.resize(200, 100)
        self._dialog.exec()

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec())

Open Dialog 클릭 전

 

Open Dialog 클릭 후

 

"Open Dialog" button을 click 할 시, 새로운 Dialog를 뜨면서, 기존 Dialog는 비활성화 된다. 새로운 Dialog가 종료되어야지 기존 Dialog가 활성화 됨 

 

import sys
#from PySide6.QtCore import QSize, Qt
from PySide6.QtWidgets import QWidget, QDialog, QApplication, QPushButton

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        button = QPushButton('Open Dialog', self)
        button.clicked.connect(self.handleOpenDialog)
        self.resize(300, 200)
        self._dialog = None

    def handleOpenDialog(self):
        if self._dialog is None:
            self._dialog = QDialog(self)
            self._dialog.resize(200, 100)
        self._dialog.show()

if __name__ == '__main__':

    import sys
    app = QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec())

Open Dialog 클릭 전
Open Dialog 클릭 후

 

"Open Dialog" button을 click하여, 새로운 Dialog가 생성되어도 기존 Dialog가 활성화 되어있다 ( Control 가능 ) 

# 위 code의 차이점 

self._dialog.show()   # modaless
self._dialog.exec()   # modal
반응형

관련글 더보기