1. 코드
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton,\ QLabel, QFontDialog, QColorDialog, QFrame from PyQt5.QtCore import Qt from PyQt5.QtGui import QColor import sys class 글꼴컬러설정다이얼로그(QWidget): def __init__(self): super().__init__() self.UI초기화() def UI초기화(self): self.label = QLabel('안녕하세요! 제주코딩베이스 캠프 PyQt5 강좌 입니다!', self) self.label.setAlignment(Qt.AlignCenter) btn1 = QPushButton('폰트 선택', self) btn1.clicked.connect(self.showFont) color = QColor(Qt.black) self.colorFrame = QFrame(self) self.colorFrame.setStyleSheet( f'background-color: {color.name()};') btn2 = QPushButton('색상 선택', self) btn2.clicked.connect(self.showColor) vbox = QVBoxLayout() vbox.addWidget(self.label) vbox.addWidget(btn1) vbox.addWidget(self.colorFrame) vbox.addWidget(btn2) self.setLayout(vbox) self.setWindowTitle('QFont, QColor Dialog') self.setGeometry(300, 300, 450, 300) self.show() def showFont(self): font, flag = QFontDialog.getFont() if flag: self.label.setFont(font) else: self.label.setText("선택 되지 않았어요! 다시 한번 선택해주세요!") def showColor(self): color = QColorDialog.getColor() if color.isValid(): self.colorFrame.setStyleSheet(f'background-color: {color.name()}') else: self.colorFrame.setStyleSheet("image : url(img/weniv-licat.png)") 프로그램무한반복 = QApplication(sys.argv) 실행인스턴스 = 글꼴컬러설정다이얼로그() 프로그램무한반복.exec_()
2. 상세 내용
HTML로 매핑을 하자면,
form
에 input
을 만드는 것이라고 생각하시면 됩니다. 여기서는 font와 color를 선택할 수 있도록 해보겠습니다.- QColorDialog 공식 문서
- QFontDialog
btn1 = QPushButton('폰트 선택', self) btn1.clicked.connect(self.showFont) color = QColor(Qt.black) self.colorFrame = QFrame(self) self.colorFrame.setStyleSheet(f'background-color: {color.name()};') btn2 = QPushButton('색상 선택', self) btn2.clicked.connect(self.showColor)
- QColor(Qt.색상) 또는 QColor(r,g,b)으로도 사용가능
- 3.6 미만 이라면
f''string
용법을 사용하지 못하므로, 아래와 같이 입력해주세요.self.colorFrame.setStyleSheet('background-color: %s' % color.name())
def showFont(self): font, flag = QFontDialog.getFont() if flag: self.label.setFont(font) else: self.label.setText("선택 되지 않았어요! 다시 한번 선택해주세요!")
- getFont()로 폰트값과 bool값을 가져옵니다.
- 만약 글꼴을 선택하고 ok버튼을 클릭하면 해당 값으로 글꼴을 변경하고 아니라면 라벨에 선택되지 않았다는 문구를 업데이트
def showColor(self): color = QColorDialog.getColor() if color.isValid(): self.colorFrame.setStyleSheet(f'background-color: {color.name()}') else: self.colorFrame.setStyleSheet("image : url(img/weniv-licat.png)")
- getColor() 로 현재 선택된 값을 가져옵니다. 단,bool값은 가져오지 못함
- 대신 isValid로 유효한지 즉, 컬러가 잘 선택되었는지 확인해 컬러값으로 Frame을 변경, 아니라면 라이캣이미지로 변경
3. 실행 화면




