본문 바로가기
Python Library/PySide

[PySide] 대화 상자 (Dialogs) (2)

by goatlab 2022. 6. 27.
728x90
반응형
SMALL

QMessageBox : 간단한 메시지 대화 상자

 

대화 상자를 수락하거나 취소할 수 있는 버튼이 있는 메시지는 간단한 패턴을 따르지 않는다. 이러한 대화 상자를 직접 구성할 수 있지만 Qt는 QMessageBox라는 내장 메시지 대화 상자 클래스도 제공한다. 이것은 정보, 경고 또는 질문 대화 상자를 만드는 데 사용할 수 있다.

 

import sys

from PySide6.QtWidgets import QApplication, QDialog, QMainWindow, QMessageBox, QPushButton

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle("My App")

        button = QPushButton("Press me for a dialog!")
        button.clicked.connect(self.button_clicked)
        self.setCentralWidget(button)

    def button_clicked(self, s):
        dlg = QMessageBox(self)
        dlg.setWindowTitle("I have a question!")
        dlg.setText("This is a simple dialog")
        button = dlg.exec_()

        if button == QMessageBox.Ok:
            print("OK!")

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

QMessageBox 대화 상자

 

대화 상자 단추 상자와 마찬가지로 QMessageBox에 표시된 버튼도 (이진 OR 연산자) |와 결합하여 여러 단추를 표시할 수 있는 상수 집합으로 구성된다. 사용 가능한 버튼 유형의 전체 목록은 아래에 나와 있다.

 

  • QMessageBox.Ok
  • QMessageBox.Open
  • QMessageBox.Save
  • QMessageBox.Cancel
  • QMessageBox.Close
  • QMessageBox.Discard
  • QMessageBox.Apply
  • QMessageBox.Reset
  • QMessageBox.RestoreDefaults
  • QMessageBox.Help
  • QMessageBox.SaveAll
  • QMessageBox.Yes
  • QMessageBox.YesToAll
  • QMessageBox.No
  • QMessageBox.NoToAll
  • QMessageBox.Abort
  • QMessageBox.Retry
  • QMessageBox.Ignore
  • QMessageBox.NoButton

 

다음 중 하나로 아이콘을 설정하여 대화 상자에 표시된 아이콘을 조정할 수도 있다.

 

 

예를 들어, 예  아니오 버튼이 있는 질문 대화 상자를 만든다.

 

    def button_clicked(self, s):
        dlg = QMessageBox(self)
        dlg.setWindowTitle("I have a question!")
        dlg.setText("This is a question dialog")
        dlg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
        dlg.setIcon(QMessageBox.Question)
        button = dlg.exec_()

        if button == QMessageBox.Yes:
            print("Yes!")
        else:
            print("No!")

QMessageBox를 사용하여 만든 질문 대화 상자

 

기본 QMessageBox 대화 상자

 

일을 더 간단하게 하기 위해 QMessageBox는 이러한 유형의 메시지 대화 상자를 구성하는 데 사용할 수 있는 여러 가지 방법이 있다. 이러한 방법은 다음과 같다.

 

QMessageBox.about(parent, title, message)
QMessageBox.critical(parent, title, message)
QMessageBox.information(parent, title, message)
QMessageBox.question(parent, title, message)
QMessageBox.warning(parent, title, message)

 

parent 매개변수는 대화 상자 child가 될 창입니다. 기본 창에서 대화 상자를 시작하는 경우 self를 쓴다.

 

    def button_clicked(self, s):
        button = QMessageBox.question(self, "Question dialog", "The longer message")

        if button == QMessageBox.Yes:
            print("Yes!")
        else:
            print("No!")

기본 제공 질문 대화 상자

 

exec()을 호출하는 대신 이제 단순히 dialog 메서드를 호출하면 대화 상자가 생성된다. 각 메소드의 리턴값은 누른 버튼이다. 반환 값을 버튼 상수와 비교하여 눌린 것을 감지할 수 있다.

 

4개의 information, question 및 메서드는 대화 상자에 표시된 버튼을 조정하고 기본적으로 하나를 선택하는 데 사용할 수 있는 선택적 및 warning 인수도 허용한다.

 

    def button_clicked(self, s):
        button = QMessageBox.critical(
            self,
            "Oh dear!",
            "Something went very wrong.",
            buttons=QMessageBox.Discard | QMessageBox.NoToAll | QMessageBox.Ignore,
            defaultButton=QMessageBox.Discard,
        )

        if button == QMessageBox.Discard:
            print("Discard!")
        elif button == QMessageBox.NoToAll:
            print("No to all!")
        else:
            print("Ignore!")

치명적 오류

728x90
반응형
LIST

'Python Library > PySide' 카테고리의 다른 글

[PySide] 대화 상자 (Dialogs) (1)  (0) 2022.06.27
[PySide] 메뉴 (Menus)  (0) 2022.06.27
[PySide] 툴바 (Toolbars)  (0) 2022.06.27
[PySide] 레이아웃 (Layouts) (3)  (0) 2022.06.23
[PySide] 레이아웃 (Layouts) (2)  (0) 2022.06.23