龙空技术网

实战PyQt5: 118-调色板QPalette

爱好史地的coder 146

前言:

如今小伙伴们对“qspinboxcss”大体比较着重,小伙伴们都需要学习一些“qspinboxcss”的相关内容。那么小编也在网摘上汇集了一些有关“qspinboxcss””的相关资讯,希望姐妹们能喜欢,咱们一起来学习一下吧!

QPalette简介

QPalettet(palette, 调色板)类相当于窗口或空间的调色板,它管理着控件或者窗口的颜色信息,每个部件(widget)都包含一个QPalette对象,并使用该调色板进行绘制。QPalette类有两个基本的枚举量,QPalette.ColorGroup和QPalette.ColorRole。

ColorGroup定义了部件的状态,它们分别是:

QPalette.Disabled (1): 控件不可用状态。QPalette.Active (0): 控件处于活跃状态(获得焦点)。QPalette.Inactive (2): 控件处于不活跃状态(未获得焦点)。QPalette.Normal (Active): 等同于QPalette.Active。

ColorRole定义了控件中不同元素所使用的颜色。

图片来源:doc.qt.io

QPalette.Window (10): 常规的背景颜色。QPalette.WindowText (0): 常规的前景颜色。QPalette.Base (9): 主要用作文本输入部件的背景色,但也可以用于其他-例如组合框下拉列表和工具栏句柄(handle)的背景。通常为白色或其他浅色。QPalette.AlternateBase(16): 在具有交替颜色(斑马条)的视图中用作交替的背景颜色。QPalette.ToolTipBase (18): 用作QToolTip和QWhatsThis的背景色。tool tip使用QPalette的非活动颜色组,因为tool tip不是活动窗口。QPalette.ToolTipText(19): 用作QToolTip和QWhatsThis的前景色。tool tip 使用QPalette的非活动颜色组,因为tool tip不是活动窗口。QPalette.PlaceholderText (20): 用作各种文本输入部件的占位符颜色。这个枚举值已在Qt 5.12中引入。QPalette.Text (6): 在使用Base作为背景色时的前景色,通常情况下和WindowText相同。QPalette.Button (1): 常规按钮的背景色。此背景色在某些需要不同样式的按钮背景颜色时可能Window不同。QPalette.ButtonText(8): 与Button一起使用的按钮前景色。QPalette.BrightText (7): 不同于WindowText的颜色,用于高亮状态,以显示和通常颜色的鲜明差异。

有一些颜色主要用于3D和阴影效果。

QPalette.Light (2): 比Button颜色更浅的颜色。QPalette.MidLight (3): 该颜色介于Button和Light之间。QPalette.Dark (4): 该颜色比Button颜色暗。QPalette.Mid (5): 该颜色介于Button和Dark之间。QPalette.Shadoe (11): 非常深的颜色。默认情况下,阴影颜色为Qt.black。

下面两个颜色一般用于标记等突出显示:

QPalette.Highlight (12): 指示选定的项目或当前的项目的颜色。默认情况下,突出显示颜色为Qt.darkBlue。QPalette.HighlightedText (13): 在Highlight高对比情况下的文本颜色,默认情况下,突出显示颜色为Qt.white。

下面两种颜色和超链接相关:

QPalette.Link (14): 用于未访问的超链接的文本颜色。默认情况下,链接颜色为Qt.blue。QPalette.LinkVisited (15): 用于已访问的超链接的文本颜色。默认情况下,链接访问的颜色是Qt.magenta。

注意,在Qt中渲染富文本时,请不要使用Link和LinkVisted, 建议使用CSS和QTextDocument.setDefsultStyleSheet()函数来修改链接的外观。例如:

brower = QTextBrower()linkColor = QColor(Qt.red)sheet = "a { text-decoration: underline; color: %1 }".format(linkColor.name())
测试

测试代码演示了修改控件的调色板参数设置,对应控件颜色发生改变的效果。 完整代码如下:

import sysfrom PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtCore import Qt, QSizefrom PyQt5.QtGui import QColor, QPixmap, QIcon, QPalettefrom PyQt5.QtWidgets import (QApplication, QWidget, QLabel, QComboBox, QLineEdit,                             QTextEdit, QPushButton, QSpinBox, QHBoxLayout,                              QFormLayout, QVBoxLayout) class DemoPalette(QWidget):    def __init__(self, parent=None):        super(DemoPalette, self).__init__(parent)                    # 设置窗口标题        self.setWindowTitle('实战PyQt5: QPalette 演示')              # 设置窗口大小        self.resize(560, 360)              self.initUi()            def initUi(self):        self.createCtrlWidget()        self.createContentWidget()                mainLayout = QHBoxLayout()        mainLayout.addWidget(self.ctrlWidget)        mainLayout.addWidget(self.contentWidget)                self.setLayout(mainLayout)            def createCtrlWidget(self):        self.ctrlWidget = QWidget()                #背景色        self.cmbWindow = QComboBox()        self.fillColorList(self.cmbWindow)        self.cmbWindow.activated[int].connect(self.setWindowColor)                #前景色        self.cmbWindowText = QComboBox()        self.fillColorList(self.cmbWindowText)        self.cmbWindowText.activated[int].connect(self.setWindowTextColor)                #按钮背景色        self.cmbButton = QComboBox()        self.fillColorList(self.cmbButton)        self.cmbButton.activated[int].connect(self.setButtonColor)                #按钮前景色        self.cmbButtonText = QComboBox()        self.fillColorList(self.cmbButtonText)        self.cmbButtonText.activated[int].connect(self.setButtonTextColor)                #编辑框景色        self.cmbBase = QComboBox()        self.fillColorList(self.cmbBase)        self.cmbBase.activated[int].connect(self.setBaseColor)                formLayout = QFormLayout()        formLayout.setContentsMargins(0, 0, 0, 0)        formLayout.setSpacing(16)        formLayout.addRow('QPalette.Window:', self.cmbWindow)        formLayout.addRow('QPalette.WindowText:', self.cmbWindowText)        formLayout.addRow('QPalette.Button', self.cmbButton)        formLayout.addRow('QPalette.ButtonText', self.cmbButtonText)        formLayout.addRow('QPalette.Base', self.cmbBase)                  self.ctrlWidget.setLayout(formLayout)            def createContentWidget(self):        self.contentWidget = QWidget()        widLayout = QVBoxLayout()                spinValue = QSpinBox()        lineEdit = QLineEdit()                formLayout = QFormLayout()        formLayout.setContentsMargins(0, 0, 0, 0)        formLayout.setSpacing(10)        formLayout.addRow('请选择一个值', spinValue)        formLayout.addRow('请输入一个字符串', lineEdit)                editText = QTextEdit('实战Qt for Python')                btnOk = QPushButton('确定')        btnCancel = QPushButton('取消')        hboxLayout = QHBoxLayout()        hboxLayout.addStretch(1)        hboxLayout.addWidget(btnOk)        hboxLayout.addWidget(btnCancel)                widLayout.addLayout(formLayout)        widLayout.addWidget(editText)        widLayout.addLayout(hboxLayout)                btnOk.setAutoFillBackground(True)        btnCancel.setAutoFillBackground(True)        self.contentWidget.setAutoFillBackground(True)                self.contentWidget.setLayout(widLayout)                    def setWindowColor(self):        colorList = QColor.colorNames()        color = QColor(colorList[self.cmbWindow.currentIndex()])                #设置调色板        pal= self.contentWidget.palette()        pal.setColor(QPalette.Window, color)        self.contentWidget.setPalette(pal)        def setWindowTextColor(self):        colorList = QColor.colorNames()        color = QColor(colorList[self.cmbWindowText.currentIndex()])                #设置调色板        pal= self.contentWidget.palette()        pal.setColor(QPalette.WindowText, color)        self.contentWidget.setPalette(pal)        def setButtonColor(self):        colorList = QColor.colorNames()        color = QColor(colorList[self.cmbButton.currentIndex()])                #设置调色板        pal= self.contentWidget.palette()        pal.setColor(QPalette.Button, color)        self.contentWidget.setPalette(pal)        def setButtonTextColor(self):        colorList = QColor.colorNames()        color = QColor(colorList[self.cmbButtonText.currentIndex()])                #设置调色板        pal= self.contentWidget.palette()        pal.setColor(QPalette.ButtonText, color)        self.contentWidget.setPalette(pal)        def setBaseColor(self):        colorList = QColor.colorNames()        color = QColor(colorList[self.cmbBase.currentIndex()])                #设置调色板        pal= self.contentWidget.palette()        pal.setColor(QPalette.Base, color)        self.contentWidget.setPalette(pal)         def fillColorList(self, cmb):        colorNameList = QColor.colorNames()                for colorname in colorNameList:            pixColor = QPixmap(70,20)            pixColor.fill(QColor(colorname))                        cmb.addItem(QIcon(pixColor), '')            cmb.setIconSize(QSize(70, 20))            #调整下拉列表的尺寸            cmb.setSizeAdjustPolicy(QComboBox.AdjustToContents)           if __name__ == '__main__':    app = QApplication(sys.argv)    window = DemoPalette()    window.show()    sys.exit(app.exec())

运行结果如下图:

测试QPalette

本文知识点应用拥有调色板QPalette对象,作为各种控件窗口的调色基础。每个QWidget都拥有自己的调色板QPalette对象。调色板中各种颜色定义。

前一篇: 实战PyQt5: 117-梯度渐变效果QGradient

喜欢的人,请多多关注,评论,收藏,点赞,和转发。

标签: #qspinboxcss