본문 바로가기
코딩취미/Python

setFrameStyle 로 설정할 수 있는 프레임 스타일 종류

by 브링블링 2024. 8. 30.
반응형

setFrameStyle 로 설정할 수 있는 프레임 스타일 종류

setFrameStyle 메서드에서 사용할 수 있는 미리 정의된 스타일은 QFrame의 다양한 프레임 스타일을 조합하여 적용할 수 있습니다. QLabel뿐만 아니라 QFrame을 기반으로 하는 다른 위젯에서도 사용할 수 있습니다. 총 7가지 프레임 셰이프와 5가지 섀도우 스타일을 조합하여 다양한 프레임 스타일을 만들 수 있습니다. 각각의 조합은 특정 UI 상황에 맞는 적절한 시각적 효과를 제공합니다.

 

  • 프레임 셰이프는 프레임의 모양을 정의하고, 프레임 섀도우는 그 프레임에 어떤 시각적 효과가 적용될지를 결정합니다.
  • 이 둘을 조합하여 다양한 스타일을 생성할 수 있습니다.
  • 간단한 UI에는 QFrame.NoFrame, 강조가 필요한 부분에는 QFrame.Panel | QFrame.Sunken 등의 스타일을 사용할 수 있습니다.

 

미리 정의된 프레임 스타일의 종류

setFrameStyle에서 사용할 수 있는 프레임 스타일은 크게 프레임 셰이프(Shape)와 프레임 섀도우(Shadow)로 나뉩니다. 이 두 가지를 조합하여 다양한 스타일을 적용할 수 있습니다. QLabel의 경우는 일반적으로 패널 스타일과 섀도우 스타일을 조합하여 사용합니다.

1. 프레임 셰이프 (Frame Shapes)

프레임의 기본 형태를 정의합니다. 총 7가지 프레임 셰이프가 있습니다.

  • QFrame.NoFrame: 프레임이 없는 상태입니다. 기본값으로 설정되며, 프레임을 표시하지 않습니다.
  • QFrame.Box: 사각형의 박스 형태의 프레임을 생성합니다.
  • QFrame.Panel: 약간 돌출된 패널 형태의 프레임을 생성합니다.
  • QFrame.WinPanel: 윈도우 패널 스타일의 프레임으로, 더 두꺼운 테두리와 약간의 돌출 효과를 가집니다.
  • QFrame.HLine: 수평선을 그리는 프레임입니다.
  • QFrame.VLine: 수직선을 그리는 프레임입니다.
  • QFrame.StyledPanel: 스타일에 따라 그려지는 패널 형태의 프레임입니다. QFrame.Panel과 유사하지만, 스타일에 더 의존합니다.

2. 프레임 섀도우 (Frame Shadows)

프레임의 섀도우(그림자) 스타일을 정의합니다. 총 5가지 섀도우 스타일이 있습니다.

  • QFrame.Plain: 아무런 섀도우 효과 없이 평평한 프레임을 생성합니다.
  • QFrame.Raised: 프레임이 위로 돌출된 것처럼 보이게 합니다.
  • QFrame.Sunken: 프레임이 아래로 눌린 것처럼 보이게 합니다.
  • QFrame.Sunken: 프레임이 안쪽으로 눌린 것처럼 보이게 합니다. 일반적으로 입력 필드나 비활성화된 버튼 등에 사용됩니다.
  • QFrame.Raised: 프레임이 돌출된 것처럼 보이게 합니다. 버튼이나 활성화된 컨트롤에 자주 사용됩니다.
반응형

조합 가능한 프레임 스타일

위의 프레임 셰이프프레임 섀도우를 조합하여 setFrameStyle에서 다양한 프레임 스타일을 적용할 수 있습니다. 몇 가지 조합 예시를 아래에 정리합니다.

from PySide6.QtWidgets import QLabel, QVBoxLayout, QApplication, QWidget

class MyWidget(QWidget):
    def __init__(self):
        super().__init__()

        # QLabel 생성
        label1 = QLabel("No Frame")
        label1.setFrameStyle(QLabel.NoFrame)
        
        label2 = QLabel("Box with Raised Shadow")
        label2.setFrameStyle(QLabel.Box | QLabel.Raised)

        label3 = QLabel("Panel with Sunken Shadow")
        label3.setFrameStyle(QLabel.Panel | QLabel.Sunken)

        label4 = QLabel("WinPanel with Raised Shadow")
        label4.setFrameStyle(QLabel.WinPanel | QLabel.Raised)

        label5 = QLabel("StyledPanel with Plain Shadow")
        label5.setFrameStyle(QLabel.StyledPanel | QLabel.Plain)

        # 레이아웃 설정
        layout = QVBoxLayout()
        layout.addWidget(label1)
        layout.addWidget(label2)
        layout.addWidget(label3)
        layout.addWidget(label4)
        layout.addWidget(label5)
        self.setLayout(layout)

# QApplication 생성 및 실행
app = QApplication([])
window = MyWidget()
window.show()
app.exec()

각 프레임 스타일의 특징

  1. NoFrame:
    • 프레임이 없으며, 깔끔하고 심플한 UI를 구성할 때 사용합니다.
  2. Box + Raised:
    • 사각형 박스 형태의 프레임이 위로 돌출된 것처럼 보입니다. 단순하지만 강조가 필요한 영역에 사용될 수 있습니다.
  3. Panel + Sunken:
    • 패널 형태의 프레임이 눌린 것처럼 보이며, 일반적으로 클릭 가능한 UI 요소나 상태 표시 등에 사용됩니다.
  4. WinPanel + Raised:
    • 윈도우 스타일의 두꺼운 패널로, 주로 다이얼로그나 중요한 컨트롤의 테두리에 사용됩니다.
  5. StyledPanel + Plain:
    • 스타일에 따라 프레임이 그려지며, 섀도우가 없고 평평한 모양입니다. UI의 다른 스타일 요소와 자연스럽게 조화를 이루는 데 적합합니다.

* 참고링크

QLabel Sunken 그림자 방향 바꾸기 + setFrameStyle 과 setStyleSheet 차이점

출처: https://hobbylife.tistory.com/entry/QLabel-Sunken-그림자-방향-바꾸기-setFrameStyle-과-setStyleSheet-차이점 [취미생활 : 프로그래밍 스터디:티스토리]

반응형