본문으로 바로가기
반응형

QColorDialog 는 사용자가 원하는 색상을 편리하게 선택할 수 있도록 제공하기 위한 다이얼로그 창입니다. QColorDialog 의 static 함수 getColor() 를 이용해서 객체를 생성할 수 있으며, 모달 다이얼로그 창입니다.

 

▼ Color File Dialog 를 띄우기 위한 QPushButton 버튼을 추가합니다. QMainWindow 에 위젯의 위치를 지정하기 위해 setGeometry() 함수를 사용했습니다. 파라미터 값은 차례대로 x, y, width, height 값을 나타냅니다. 그리고 clicked 시그널에 dialog_open() Slot 을 연결했습니다. 

# QButton 위젯 생성
self.button = QPushButton('Color Dialog Button', self)
self.button.clicked.connect(self.dialog_open)
self.button.setGeometry(10, 10, 200, 50)

 

Color File Dialog 에서 사용자가 선택한 색상을 받아서 헥사값을 표시할 라벨을 생성합니다. 값이 제대로 반환되는지 확인하기 위한 용도입니다.

# QColorDialog 반환값 표시 라벨
self.colorLabel = QLabel(self)
self.colorLabel.setGeometry(10, 60, 200, 50)

 

Color File Dialog 를 띄우기 위해 추가한 QPushButton 에 연결한 함수 dialog_open() 이 구현한 내용입니다. QColorDialog 는 생성자를 통해서 객체를 생성할 필요없이 static 함수 getColor() 이용합니다. QColorDialog  모달 형식으로 창이 열립니다. QtWidgets 패키지에 포함되어 있는 위젯입니다. 사용자가 색상을 선택하고 창을 닫으면 색상에 해당하는 헥사값을 반환합니다. color 변수에 저장한 헥사값은 QLabel 객체인 colorLabel setText() 함수를 이용해서 화면에 표현합니다.

from PyQt5.QtWidgets import QColorDialog

# 버튼 이벤트 함수
@pyqtSlot()
def dialog_open(self):
    color = QColorDialog.getColor()
    if color.isValid():
        self.colorLabel.setText(color.name())

 

추가로 Color File Dialog 로부터 받은 색상값을 이용해서 위젯 배경(Background) 의 색상을 변경해 보겠습니다. 모든 위젯에는 setStyleSheet() 라는 함수가 있습니다. 이 함수를 통해서 위젯을 디자인할 수 있는데, 파라미터로 웹 페이지 만들 때 많이 사용하는 CSS 코드를 문자열로 입력합니다. CSS 에서 background-color 이 배경색 속성입니다. 해당 속성 값으로 입력한 헥사값이 위젯의 배경색이 됩니다. color.name() QColorDialog 다이얼로그에서 받은 색상 헥사값입니다.

self.colorLabel.setStyleSheet(
    'background-color: '+ color.name() +'; border: 1px solid black;')

 

▼ 결과 화면은 다음과 같습니다. QColorDialog 로 받은 헥사값 text 를 QLabel 에 표시하고 배경색을 헥사값으로 적용했습니다.

 

전체 소스는 다음과 같습니다.

#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import QLabel, QMainWindow, QPushButton, \
    QApplication, QColorDialog
from PyQt5.QtCore import *


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        # 윈도우 설정
        self.setGeometry(300, 300, 400, 300)  # x, y, w, h
        self.setWindowTitle('Status Window')

        # QButton 위젯 생성
        self.button = QPushButton('Color Dialog Button', self)
        self.button.clicked.connect(self.dialog_open)
        self.button.setGeometry(10, 10, 200, 50)

        # QColorDialog 반환값 표시 라벨
        self.colorLabel = QLabel(self)
        self.colorLabel.setGeometry(10, 60, 200, 50)

    # 버튼 이벤트 함수
    @pyqtSlot()
    def dialog_open(self):
        color = QColorDialog.getColor()
        if color.isValid():
            self.colorLabel.setText(color.name())
            self.colorLabel.setStyleSheet(
                'background-color: '+ color.name() +'; border: 1px solid black;')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
반응형