Qt에서 사용자 인터페이스를 그리는 데 사용되는 색상 선택을 팔레트라고합니다.
응용 프로그램 수준과 위젯 별 팔레트는 모두 QPalette 개체를 통해 관리됩니다.
팔레트는 응용 프로그램 수준과 위젯 수준 모두에서 설정할 수 있으므로 전역 표준 팔레트를 설정하고 위젯별로 이를 재정의할 수 있습니다.
전역 팔레트는 일반적으로 Qt 테마 (일반적으로 OS에 따라 다름)에 의해 정의되지만이를 재정의하여 전체 앱의 모양을 변경할 수 있습니다. 활성 전역 팔레트는 QApplication.palette() 에서 액세스하거나 새로운 빈 QPalette 인스턴스를 만들어 액세스 할 수 있습니다.
예를 들면 다음과 같습니다.
from PyQt6.QtGui import QPalette
palette = QPalette()
palette.setColor(role, color)
palette.setColor(QPalette.ColorRole.Window, QColor(53,53,53))
palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white)
Table 4. Main roles
Constant | Value | Description |
QPalette.ColorRole.Window | 10 | Background color for windows. |
QPalette.ColorRole.WindowText | 0 | Default text color for windows. |
QPalette.ColorRole.Base | 9 | Background of text entry widgets, combobox drop down lists and toolbar handles. Usually white or light |
QPalette.ColorRole.AlternateBa se | 16 | Second Base color used in striped (alternating) rows — e.g. QAbstractItemView.setAlternatingRowCo lors() |
QPalette.ColorRole.ToolTipBase | 18 | Background color for QToolTip and QWhatsThis hover indicators. Both tips use the Inactive group (see later) because they are not active windows. |
QPalette.ColorRole.ToolTipText | 19 | Foreground color for QToolTip and QWhatsThis. Both tips use the Inactive group (see later) because they are not active windows. |
QPalette.ColorRole.Placeholder Text | 20 | Color for placeholder text in widgets. |
QPalette.ColorRole.Text | 6 | Text color for widgets colored with Base background. Must provide a good contrast with both Window and Base. |
QPalette.ColorRole.Button | 1 | Default button background color. This can differ from Window but must provide good contrast with ButtonText. |
QPalette.ColorRole.ButtonText | 8 | Text color used on buttons, must contrast with Button color. |
QPalette.ColorRole.BrightText | 7 | Text color which is very different from WindowText, contrasts well with black. Used were other Text and WindowText colors would give poor contrast. Note: Not just used for text. |
Table 5. 3D bevel roles
Constant | Value | Description |
QPalette.ColorRole.Light | 2 | Lighter than Button color. |
QPalette.ColorRole.Midlight | 3 | Between Button and Light. |
QPalette.ColorRole.Dark | 4 | Darker than Button. |
QPalette.ColorRole.Mid | 5 | Between Button and Dark. |
QPalette.ColorRole.Shadow | 11 | A very dark color. By default, the shadow color is Qt.GlobalColor.black. |
Table 6. Highlighting & links
Constant | Value | Description |
QPalette.ColorRole.Highlight | 12 | A color to indicate a selected item or the current item. By default, the highlight color is Qt.GlobalColor.darkBlue. |
QPalette.ColorRole.Highlighted Text | 13 | A text color that contrasts with Highlight. By default, the highlighted text Qt.GlobalColor.white. |
QPalette.ColorRole.Link | 14 | A text color used for unvisited hyperlinks. By default, the link color is Qt.GlobalColor.blue. |
QPalette.ColorRole.LinkVisited | 15 | A text color used for already visited hyperlinks. By default, the link-visited color is Qt.GlobalColor.magenta. |
위젯이 active, inactive or disabled 상태일 때 변경되는 UI 부분의 경우 각 상태에 대해 색상을 설정해야 합니다.
palette.setColor(group, role, color)
Constant | Value |
QPalette.ColorGroup.Disabled | 1 |
QPalette.ColorGroup.Active | 0 |
QPalette.ColorGroup.Inactive | 2 |
QPalette.ColorGroup.Normal synonym for Active | 0 |
palette.setColor(QPalette.ColorGroup.Disabled,
QPalette.ColorRole.WindowText,
Qt.GlobalColor.white)
팔레트가 정의되면 .setPalette() 를 사용하여 QApplication 객체에 설정하여 애플리케이션 또는 단일 위젯에 적용 할 수 있습니다.
예를 들어 다음 예제에서는 창 텍스트와 배경의 색상을 변경합니다(여기서는 텍스트가 QLabel을 사용하여 추가됨).
themes/palette_test.py
from PyQt6.QtWidgets import QApplication, QLabel
from PyQt6.QtGui import QPalette, QColor
from PyQt6.QtCore import Qt
import sys
app = QApplication(sys.argv)
palette = QPalette()
palette.setColor(QPalette.ColorRole.Window, QColor(0, 128, 255))
palette.setColor(QPalette.ColorRole.WindowText, Qt.GlobalColor.white)
app.setPalette(palette)
w = QLabel("Palette Test")
w.show()
app.exec()
일반적으로 사용자 설정을 재정의하지 않아야 하지만 밝은 UI가 사용자의 색 판단 기능을 방해하는 사진 뷰어 또는 비디오 편집기와 같은 특정 응용 프로그램 클래스에서는 의미가 있을 수 있습니다. 다음 앱 기본 항목은 Jürgen Skrotzky의 사용자 지정 팔레트를 사용하여 응용 프로그램에 전역 어두운 테마를 제공합니다.
themes/palette_dark.py
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.QtGui import QPalette, QColor
from PyQt6.QtCore import Qt
import sys
darkPalette = QPalette()
darkPalette.setColor(QPalette.ColorRole.Window, QColor(53, 53, 53))
darkPalette.setColor(
QPalette.ColorRole.WindowText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.WindowText,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.Base, QColor(42, 42, 42))
darkPalette.setColor(
QPalette.ColorRole.AlternateBase, QColor(66, 66, 66)
)
darkPalette.setColor(
QPalette.ColorRole.ToolTipBase, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorRole.ToolTipText, Qt.GlobalColor.white
)
darkPalette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.Text,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.Dark, QColor(35, 35, 35))
darkPalette.setColor(QPalette.ColorRole.Shadow, QColor(20, 20, 20))
darkPalette.setColor(QPalette.ColorRole.Button, QColor(53, 53, 53))
darkPalette.setColor(
QPalette.ColorRole.ButtonText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.ButtonText,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.BrightText, Qt.GlobalColor.red)
darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.Highlight,
QColor(80, 80, 80),
)
darkPalette.setColor(
QPalette.ColorRole.HighlightedText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.HighlightedText,
QColor(127, 127, 127),
)
app = QApplication(sys.argv)
app.setPalette(darkPalette)
w = QMainWindow() # Replace with your QMainWindow instance.
w.show()
app.exec()
themes/palette_dark_widgets.py
from PyQt6.QtGui import QPalette, QColor
from PyQt6.QtCore import Qt
import sys
from PyQt6.QtWidgets import (
QApplication,
QMainWindow,
QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLCDNumber,
QLabel,
QLineEdit,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit,
QWidget, # <1>
QVBoxLayout, # <2>
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Widgets App")
layout = QVBoxLayout()
widgets = [
QCheckBox,
QComboBox,
QDateEdit,
QDateTimeEdit,
QDial,
QDoubleSpinBox,
QFontComboBox,
QLCDNumber,
QLabel,
QLineEdit,
QProgressBar,
QPushButton,
QRadioButton,
QSlider,
QSpinBox,
QTimeEdit,
]
for w in widgets:
widget = w(self)
widget.setAutoFillBackground(True)
layout.addWidget(widget)
widget = QWidget()
widget.setLayout(layout)
# Set the central widget of the Window. Widget will expand
# to take up all the space in the window by default.
self.setCentralWidget(widget)
app = QApplication(sys.argv)
app.setStyle("Fusion")
darkPalette = app.palette()
darkPalette.setColor(QPalette.ColorRole.Window, QColor(53, 53, 53))
darkPalette.setColor(
QPalette.ColorRole.WindowText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.WindowText,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.Base, QColor(42, 42, 42))
darkPalette.setColor(
QPalette.ColorRole.AlternateBase, QColor(66, 66, 66)
)
darkPalette.setColor(
QPalette.ColorRole.ToolTipBase, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorRole.ToolTipText, Qt.GlobalColor.white
)
darkPalette.setColor(QPalette.ColorRole.Text, Qt.GlobalColor.white)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.Text,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.Dark, QColor(35, 35, 35))
darkPalette.setColor(QPalette.ColorRole.Shadow, QColor(20, 20, 20))
darkPalette.setColor(QPalette.ColorRole.Button, QColor(53, 53, 53))
darkPalette.setColor(
QPalette.ColorRole.ButtonText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.ButtonText,
QColor(127, 127, 127),
)
darkPalette.setColor(QPalette.ColorRole.BrightText, Qt.GlobalColor.red)
darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.Highlight,
QColor(80, 80, 80),
)
darkPalette.setColor(
QPalette.ColorRole.HighlightedText, Qt.GlobalColor.white
)
darkPalette.setColor(
QPalette.ColorGroup.Disabled,
QPalette.ColorRole.HighlightedText,
QColor(127, 127, 127),
)
w = MainWindow() # Replace with your custom mainwindow.
w.show()
app.setPalette(darkPalette)
app.exec()
'PyQt5_' 카테고리의 다른 글
Qt Style Sheets (QSS) (0) | 2023.03.13 |
---|---|
Icons (0) | 2023.03.13 |
Styles (0) | 2023.03.13 |
Qt Designer (0) | 2023.03.13 |
Events (0) | 2023.03.13 |
댓글