다이얼로그 (Dialog)

지환·2023년 6월 1일
0

python

목록 보기
9/12

01) QInputDialog

입력 다이얼로그 (QInputDialog)는 사용자가 간단한 값을 입력할 때 사용하는 다이얼로그입니다.

입력값의 형태에 따라 아래와 같이 다섯 개의 유용한 함수가 제공됩니다.

1. getText()

2. getMultiLineText()

3. getInt()

4. getDouble()

5. getItem()

예제

## Ex 6-1. QInputDialog.

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton, QLineEdit, QInputDialog)


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.btn = QPushButton('Dialog', self)
        self.btn.move(30, 30)
        self.btn.clicked.connect(self.showDialog)

        self.le = QLineEdit(self)
        self.le.move(120, 35)

        self.setWindowTitle('Input dialog')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def showDialog(self):
        text, ok = QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')

        if ok:
            self.le.setText(str(text))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

구체적인 설명

text, ok = QInputDialog.getText(self, 'Input Dialog', 'Enter your name:')

이 코드를 통해 입력 대화창이 나타납니다.

두 번째 매개변수는 대화창의 타이틀, 세 번째 매개변수는 대화창 안에 보여질 메세지를 의미합니다.

입력 대화창은 입력한 텍스트와 불 (Boolean) 값을 반환합니다.

텍스트를 입력한 후 'OK' 버튼을 누르면 불 값은 True, 'Cancel' 버튼을 누르면 불 값은 False가 됩니다.

if ok:
    self.le.setText(str(text))

입력한 값을 setText() 메서드를 통해 줄 편집 위젯에 표시되도록 합니다.

02) QColorDialog

컬러 다이얼로그 (QColorDialog)는 색상을 선택할 수 있는 다이얼로그입니다

예제

## Ex 6-2. QColorDialog.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFrame, QColorDialog
from PyQt5.QtGui import QColor


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        col = QColor(0, 0, 0)

        self.btn = QPushButton('Dialog', self)
        self.btn.move(30, 30)
        self.btn.clicked.connect(self.showDialog)

        self.frm = QFrame(self)
        self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())
        self.frm.setGeometry(130, 35, 100, 100)

        self.setWindowTitle('Color Dialog')
        self.setGeometry(300, 300, 250, 180)
        self.show()

    def showDialog(self):
        col = QColorDialog.getColor()

        if col.isValid():
            self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

구체적인 설명

col = QColor(0, 0, 0)

QColor를 사용해서 배경색인 검정색을 만들었습니다.

col = QColorDialog.getColor()

QColorDialog 클래스의 getColor() 메서드는 컬러 다이얼로그 창을 띄우고 사용자가 색상을 선택하도록 합니다.

그리고 선택한 색상을 QColor 클래스의 형태로 반환합니다.

if col.isValid():
    self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())

색상을 선택하고 'OK' 버튼을 눌렀다면, col.isValid()의 불 값이 True이고, 'Cancel' 버튼을 눌렀다면, 불 값이 False가 됩니다.

선택한 색상이 프레임의 배경색으로 설정됩니다.

개인적인 생각으로 중요도가 많이 떨어진다.

QMessageBox

QMessageBox 클래스는 사용자에게 정보를 제공하거나 질문과 대답을 할 수 있는 대화창을 제공합니다.

흔히 어떤 동작에 대해 확인이 필요한 경우에 메세지 박스를 사용합니다.

예제

## Ex 6-5. QMessageBox.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMessageBox


class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('QMessageBox')
        self.setGeometry(300, 300, 300, 200)
        self.show()

    def closeEvent(self, event):
        reply = QMessageBox.question(self, 'Message', 'Are you sure to quit?',
                                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

        if reply == QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()


if __name__ == '__main__':
   app = QApplication(sys.argv)
   ex = MyApp()
   sys.exit(app.exec_())

이제 창을 닫을 때, 이 동작을 한 번 더 확인하기 위한 메세지 박스가 나타나게 됩니다.

구체적인 설명

QWidget을 종료할 때, QCloseEvent가 생성되어 위젯에 전달됩니다.

위젯의 동작을 수정하기 위해 closeEvent() 이벤트 핸들러를 수정해야합니다.

reply = QMessageBox.question(self, 'Message', 'Are you sure to quit?',
                             QMessageBox.Yes | QMessageBox.No, QMessageBox.No)

두번째 매개변수는 타이틀바에 나타날 문자열 ('Message'), 세번째 매개변수는 대화창에 나타날 문자열 ('Are you sure to quit?')을 입력합니다.

네 번째에는 대화창에 보여질 버튼의 종류를 입력하고, 마지막으로 디폴트로 선택될 버튼을 설정해줍니다.

QMessageBox.No로 설정할 경우, 메세지 박스가 나타났을 때 'No' 버튼이 선택되어 있습니다.

반환값은 reply 변수에 저장됩니다.

if reply == QMessageBox.Yes:
    event.accept()
else:
    event.ignore()

Yes' 버튼을 클릭했을 경우, 이벤트를 받아들이고 위젯을 종료합니다.

'No' 버튼을 클릭하면, 이벤트를 무시하고 위젯을 종료하지 않습니다.

출처)https://wikidocs.net/21935

profile
아는만큼보인다.

0개의 댓글