입력 다이얼로그 (QInputDialog)는 사용자가 간단한 값을 입력할 때 사용하는 다이얼로그입니다.
입력값의 형태에 따라 아래와 같이 다섯 개의 유용한 함수가 제공됩니다.
## 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() 메서드를 통해 줄 편집 위젯에 표시되도록 합니다.
컬러 다이얼로그 (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 클래스는 사용자에게 정보를 제공하거나 질문과 대답을 할 수 있는 대화창을 제공합니다.
흔히 어떤 동작에 대해 확인이 필요한 경우에 메세지 박스를 사용합니다.
## 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' 버튼을 클릭하면, 이벤트를 무시하고 위젯을 종료하지 않습니다.