반응형
PySide6에서 여러 개의 QLabel 스타일 일괄 설정하기
PySide6을 사용하여 GUI를 개발할 때, 여러 개의 QLabel 객체가 있을 경우 동일한 스타일을 적용하는 것이 중요합니다. 모든 QLabel에 같은 폰트 크기, 글꼴 굵기, 패널 스타일을 적용하면 디자인의 일관성을 유지할 수 있습니다.
이번 글에서는 여러 개의 QLabel에 동일한 폰트와 패널 스타일을 일괄 적용하는 방법을 다룹니다. setFont()와 setFrameStyle()을 활용하는 방법을 배우고, setStyleSheet()로 더욱 세부적인 스타일을 조정하는 방법도 함께 알아보겠습니다.
1. QLabel에 동일한 폰트와 패널 스타일 적용하기
여러 개의 QLabel이 있을 때, 개별적으로 스타일을 설정하는 것은 비효율적입니다. 이를 해결하기 위해 for 루프를 사용하여 모든 QLabel에 동일한 스타일을 적용할 수 있습니다.
✅ 여러 개의 QLabel에 동일한 스타일 적용하기
from PySide6.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout
from PySide6.QtGui import QFont
class MyWidget(QWidget):
def __init__(self):
super().__init__()
# 공통 폰트 설정 (Arial, 14pt, Bold)
common_font = QFont("Arial", 14, QFont.Bold)
# QLabel 생성
labels = [
QLabel("Label 1"),
QLabel("Label 2"),
QLabel("Label 3")
]
# 모든 QLabel에 동일한 스타일 적용
for label in labels:
label.setFont(common_font) # 폰트 적용
label.setFrameStyle(QLabel.Panel | QLabel.Sunken) # Sunken 패널 스타일 적용
label.setLineWidth(2) # 테두리 두께 설정
label.setStyleSheet("""
QLabel {
padding: 10px;
margin: 5px;
background-color: lightgray;
border-radius: 5px;
}
""")
# 레이아웃 설정
layout = QVBoxLayout()
for label in labels:
layout.addWidget(label)
self.setLayout(layout)
# QApplication 실행
app = QApplication([])
window = MyWidget()
window.show()
app.exec()
2. 코드 설명
위 코드를 실행하면 세 개의 QLabel이 동일한 스타일을 적용받아 나타납니다. 주요 코드 요소를 하나씩 설명해 보겠습니다.
🔹 QFont를 사용하여 동일한 폰트 적용
common_font = QFont("Arial", 14, QFont.Bold)
- 글꼴(Font): "Arial"
- 크기(Size): 14px
- 굵기(Weight): QFont.Bold
🔹 setFrameStyle()로 Sunken 패널 스타일 적용
label.setFrameStyle(QLabel.Panel | QLabel.Sunken)
label.setLineWidth(2)
반응형
- QLabel.Panel: 패널 스타일 적용
- QLabel.Sunken: 프레임이 눌린(Sunken) 형태로 보이도록 설정
- setLineWidth(2): 테두리 두께를 2px로 설정
🔹 setStyleSheet()로 추가적인 스타일 적용
label.setStyleSheet("""
QLabel {
padding: 10px;
margin: 5px;
background-color: lightgray;
border-radius: 5px;
}
""")
- padding: 10px; → 내부 여백 추가
- margin: 5px; → 라벨 간 간격 추가
- background-color: lightgray; → 배경을 연한 회색으로 설정
- border-radius: 5px; → 모서리를 둥글게 설정
3. setFrameStyle() vs setStyleSheet() 차이점
QLabel의 스타일을 설정할 때, setFrameStyle()과 setStyleSheet()은 서로 다른 방식으로 적용됩니다. 아래 표에서 차이점을 확인하세요.
구분 | setFrameStyle() | setStyleSheet() |
사용 방식 | 미리 정의된 스타일을 적용 | CSS 스타일을 활용하여 세부 조정 |
주요 기능 | 테두리, 패널 스타일 설정 (Sunken, Raised 등) | 색상, 테두리, 배경, 그림자 등 세밀한 스타일링 가능 |
유연성 | 제한적 (미리 제공된 스타일만 적용 가능) | 자유로운 커스터마이징 가능 |
예제 코드 | `label.setFrameStyle(QLabel.Panel | QLabel.Sunken)` |
적용 속도 | 빠름 (네이티브 UI 요소 사용) | 다소 성능 부담 (CSS 렌더링) |
✅ 언제 사용해야 할까?
- 기본적인 스타일 설정 → setFrameStyle() 사용
- 세부적인 커스터마이징 (둥근 테두리, 배경색 등) → setStyleSheet() 사용
4. 정리 및 결론
- 여러 개의 QLabel에 동일한 폰트와 패널 스타일을 적용하려면 for 루프를 사용하면 편리합니다.
- setFrameStyle(QLabel.Panel | QLabel.Sunken)을 사용하면 패널 스타일을 손쉽게 변경할 수 있습니다.
- setStyleSheet()을 사용하면 더 세밀한 디자인을 적용할 수 있습니다.
- setFrameStyle()은 성능이 뛰어나지만, 스타일이 제한적입니다.
- setStyleSheet()을 사용하면 다양한 스타일을 조정할 수 있지만, 성능에 약간의 부담이 있을 수 있습니다.
반응형
'코딩취미 > Python' 카테고리의 다른 글
IntelHex Python 모듈을 활용한 HEX & BIN 파일 검증 방법 (0) | 2025.02.23 |
---|---|
PySide6: QVBoxLayout 내부의 QGroupBox 너비 확인하기 (0) | 2025.02.22 |
PySide6에서 QLabel 스타일 변경 및 Sunken 효과 적용하기 (0) | 2025.02.22 |
PySide6 QComboBox 포커스 아웃 이벤트 처리 및 선택 텍스트 확인 방법 (0) | 2025.02.21 |
QFileDialog 특정폴더를 기본 경로 설정하기 (0) | 2025.02.21 |