Python入坑系列-pyside6桌面编程之QColor添加色彩彰显个性
通过本文章,你可以掌握以下内容:
- Pyside6 Color颜色模型
- Pyside6 Color色系介绍
- Pyside6更换系统主题
1、Pyside6 Color颜色模型
颜色通常以RGB(红色、绿色和蓝色)分量的形式指定,但也可以以HSV(色调、饱和度和亮度)和CMYK(青色、品红、黄色和黑色)分量的形式指定。此外,还可以使用颜色名称来指定颜色。颜色名称可以是SVG 1.0颜色名称中的任何一个
三种颜色模型
QColor构造函数基于RGB值创建颜色。要基于HSV或CMYK值创建QColor,分别使用toHsv()和toCmyk()函数。这些函数返回使用所需格式的颜色副本。此外,静态函数fromRgb()、fromHsv()和fromCmyk()可以从指定的值创建颜色。或者,可以使用convertTo()函数将颜色转换为任一三种格式(返回所需格式的颜色副本),或使用setRgb()、setHsv()和setCmyk()函数改变此颜色的格式。spec()函数指明颜色是如何被指定的。
可以通过向fromString()函数传递一个RGB字符串(如“#112233”)、一个ARGB字符串(如“#ff112233”)或一个颜色名称(如“blue”)来设置颜色。颜色名称取自SVG 1.0颜色名称。name()函数以“#000000”的格式返回颜色的名称。也可以使用setRgb()、setHsv()和setCmyk()设置颜色。要获取更亮或更暗的颜色,分别使用lighter()和darker()函数。
isValid()函数指示QColor是否完全合法。例如,RGB值超出范围的RGB颜色是非法的。出于性能原因,QColor大多忽略非法颜色,因此,使用无效颜色的结果是未定义的。颜色组件可以单独检索,例如使用red()、hue()和cyan()。
颜色组件的值也可以一次性使用getRgb()、getHsv()和getCmyk()函数检索。使用RGB颜色模型,颜色组件还可以通过rgb()访问。
有几个相关的非成员函数:QRgb是代表RGB值三元组(r, g, b)的unsigned int的类型定义。注意,它也可以保存alpha通道的值(更多信息,请参见Alpha-Blended Drawing部分)。qRed()、qBlue()和qGreen()函数返回给定QRgb值的相应组件,而qRgb()和qRgba()函数基于给定的组件值创建并返回QRgb三元组。最后,qAlpha()函数返回提供的QRgb的alpha组件,qGray()函数基于给定值计算并返回一个灰度值。QColor是平台和设备独立的。QColormap类将颜色映射到硬件上。
命名空间中有 20 个预定义QColor对象QColorConstants,包括黑色、白色、主要和次要颜色、这些颜色的较暗版本,以及三种灰度。此外,QColorConstants.Svg命名空间为标准SVG颜色关键字名称定义了QColor对象。
预定义颜色
QColorConstants.Color0、QColorConstants.Color1和QColorConstants.Transparent颜色用于特殊目的。QColorConstants.Color0(零像素值)和QColorConstants.Color1(非零像素值)是在QBitmaps中绘图的特殊颜色。使用QColorConstants.Color0绘制将位图位设置为0(透明;即背景),而使用QColorConstants.Color1绘制将位设置为1(不透明;即前景)。QColorConstants.Transparent用于指示透明像素。使用此值绘制时,将使用适合正在使用的底层像素格式的像素值。
RGB 模型是面向硬件的。它的表现接近大多数显示器的显示。相比之下,HSV 以更适合人类对颜色感知的方式表示颜色。例如,“强于”、“暗于”和“相反”的关系在 HSV 中很容易表达,但在 RGB 中很难表达。
HSV 与 RGB 一样,具有三个组成部分
- H(色调),如果颜色是彩色(不是灰色),则在 0 到 359 范围内;如果颜色是灰色,则毫无意义。它代表大多数人熟悉的色轮上的度数。红色为 0(度),绿色为 120,蓝色为 240。
HSV颜色模型
- S代表饱和度,范围是0到255,它越大,颜色越强。浅灰色的饱和度接近 0;非常强烈的颜色饱和度接近 255。
饱和度
- V 代表颜色,范围为 0 到 255,代表颜色的明度或亮度。 0 为黑色; 255 尽可能远离黑色。
透明度
2、Pyside6 Color色系介绍
色彩是视觉设计的重要组成部分,它不仅能影响美观性,还能影响情绪和行为。由于桌面程序默认组件的色彩比较单一,需要开发通过了解色彩系统给组件配色,给用户带来视觉冲击。
下面是自定义颜色标签,部分示例会使用到该类
原色是不能通过混合其他颜色来创建的颜色。在传统的色彩理论中,原色包括红色、黄色和蓝色。在光的颜色混合(如屏幕显示)中,原色被认为是红色、绿色和蓝色(RGB)
示例代码如下:
原色示例图
在视觉设计中指的是在一幅画面、设计作品或空间中占据主导地位的颜色。这种颜色通常是最引人注目的,能够影响整体的视觉效果和情感氛围。选择合适的主色调对于确保设计的协调性和传达正确的信息至关重要。
示例代码如下:
主色示例图
温暖色系主要包括红色、橙色、黄色及其衍生色调,这些颜色通常会让人联想到阳光、火焰和暖光等,能够给人带来温暖、舒适和活力的感觉。在视觉设计、艺术和室内装饰中,温暖色系经常被用来创造亲切、欢快的氛围
示例代码如下:
暖色示例
是色轮上互为对立的颜色,它们在视觉上形成鲜明的对比,能够相互强化对方的鲜艳度和视觉冲击力。当这些颜色组合在一起时,可以创造出极具吸引力和动态的视觉效果,除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)
示例代码如下:
辅助色示例图
中性色指的是不包含或几乎不包含色相的颜色,它们在色彩搭配中起到平衡和稳定的作用。中性色包括黑色、白色、灰色,以及不同深浅的棕色和米色。这些颜色因其灵活性和适应性,在设计和艺术领域中被广泛应用。常用于文本、背景和边框颜色,通过运用不同的中性色,来表现层次结构。
示例代码如下:
中性色示例图
Pyside6可以通过QColorDialog.getColor(),直接打开颜色选择器
Pyside6颜色选择器
SVG-1
SVG-2
SVG-3
SVG-4
3、更换系统主题
在PySide6与html页面实现主题切换类似,通过更换全局样式表实现,具体步骤如下:
1.定义样式表:为每个主题创建一个样式表文件,或者在一个大的样式表文件中为不同的主题定义不同的部分。
2. 加载样式表:在应用程序启动时,根据用户的主题选择加载相应的样式表。这可以通过读取一个配置文件、数据库或者其他持久化存储的方式来确定用户上次选择的主题。
3. 应用样式表:使用QApplication的setStyleSheet方法应用加载的样式表。这将影响应用程序中所有控件的外观。
4. 切换主题:提供一个界面元素(如菜单项、按钮等)供用户选择主题。当用户选择一个新主题时,重新加载对应的样式表并应用它。
5. 保存用户选择:将用户的主题选择保存到配置文件、数据库或其他持久化存储中,以便下次启动应用程序时能够恢复用户的选择。
示例代码如下:
皮肤切换示例
前端新手看过来,教你从零CSS做漂亮网页,这样学习太有成就感了
层叠样式表(Cascading Style Sheet,简称:CSS)是为网页添加样式的代码。本节将介绍 CSS 的基础知识,并解答类似问题:怎样将文本设置为黑色或红色?怎样将内容显示在屏幕的特定位置?怎样用背景图片或颜色来装饰网页?
和 HTML 类似,CSS 也不是真正的编程语言,甚至不是标记语言。它是一门样式表语言,这也就是说人们可以用它来选择性地为 HTML 元素添加样式。举例来说,要选择一个 HTML 页面里所有的段落元素,然后将其中的文本改成红色,可以这样写 CSS:
不妨试一下:首先新建一个 styles 文件夹,在其中新建一个 style.css 文件,将这三行 CSS 保存在这个新文件中。
然后再将该 CSS 文件连接至 HTML 文档,否则 CSS 代码不会对 HTML 文档在浏览器里的显示效果有任何影响。(如果你没有完成前几节的实践,请复习处理文件 和 HTML 基础。在笔记本里有这个方面的内容!)
1、打开 index.html 文件,然后将下面一行粘贴到文档头(也就是 <head> 和 </head> 标签之间)。
2、保存 index.html 并用浏览器将其打开。应该看到以下页面:
如果段落文字变红,那么祝贺你,你已经成功地迈出了 CSS 学习的第一步。
让我们来仔细看一看上述CSS:
整个结构称为 规则集(通常简称“规则”),各部分释义如下:
- 选择器(Selector)
- HTML 元素的名称位于规则集开始。它选择了一个或者多个需要添加样式的元素(在这个例子中就是 p 元素)。要给不同元素添加样式只需要更改选择器就行了。
- 声明(Declaration)
- 一个单独的规则,比如说 color: red; 用来指定添加样式元素的属性。
- 属性(Properties)
- 改变 HTML 元素样式的途径。(本例中 color 就是 “ 元素的属性。)CSS 中,由编写人员决定修改哪个属性以改变规则。
- 属性的值(Property value)
- 在属性的右边,冒号后面即属性的值,它从指定属性的众多外观中选择一个值(我们除了 red 之外还有很多属性值可以用于 color )。
注意其他重要的语法:
- 每个规则集(除了选择器的部分)都应该包含在成对的大括号里({})。
- 在每个声明里要用冒号(:)将属性与属性值分隔开。
- 在每个规则集里要用分号(;)将各个声明分隔开。
如果要同时修改多个属性,只需要将它们用分号隔开,就像这样:
也可以选择多种类型的元素并为它们添加一组相同的样式。将不同的选择器用逗号分开。例如:
选择器有许多不同的类型。上面只介绍了元素选择器,用来选择 HTML 文档中给定的元素。但是选择的操作可以更加具体。下面是一些常用的选择器类型:
选择器的种类远不止于此,更多信息请参阅 选择器。
译注:再一次说明,中文字体文件较大,不适合直接用于 Web Font。
在探索了一些 CSS 基础后,我们来把更多规则和信息添加至 style.css 中,从而让示例更美观。首先,让字体和文本变得更漂亮。
第一步:找到之前Google Font 输出的地址。并以<link>元素的形式添加进index.html文档头(<head>和</head>之间的任意位置)。代码如下:
以上代码为当前网页下载 Open Sans 字体,从而使自定义 CSS 中可以对 HTML 元素应用这个字体。
第二步:接下来,删除 style.css 文件中已有的规则。虽然测试是成功的了,但是红字看起来并不太舒服。
第三步:将下列代码添加到相应的位置,用你在 Google Fonts 找到的字体替代 font-family 中的占位行。( font-family 意味着你想要你的文本使用的字体。)这条规则首先为整个页面设定了一个全局字体和字号(因为 <html> 是整个页面的父元素,而且它所有的子元素都会继承相同的 font-size 和 font-family):
注:CSS 文档中所有位于 /* 和 */ 之间的内容都是 CSS 注释,它会被浏览器在渲染代码时忽略。你可以在这里写下对你现在要做的事情有帮助的笔记。
译注:/*“*/ 不可嵌套,/*这样的注释是/*不行*/的*/。CSS 不接受 // 注释。
接下来为文档体内的元素(<h1> (en-US)、<li>和<p>)设置字号。将标题居中显示,并为正文设置行高和字间距,从而提高页面的可读性。
可以随时调整这些 px 值来获得满意的结果,以下是大体效果:
编写 CSS 时你会发现,你的工作好像是围绕着一个一个盒子展开的——设置尺寸、颜色、位置,等等。页面里大部分 HTML 元素都可以被看作若干层叠的盒子。
并不意外,CSS 布局主要就是基于盒模型的。每个占据页面空间的块都有这样的属性:
- padding:即内边距,围绕着内容(比如段落)的空间。
- border:即边框,紧接着内边距的线。
- margin:即外边距,围绕元素外部的空间。
这里还使用了:
- width :元素的宽度
- background-color :元素内容和内边距底下的颜色
- color :元素内容(通常是文本)的颜色
- text-shadow :为元素内的文本设置阴影
- display :设置元素的显示模式(暂略)
开始在页面中添加更多 CSS 吧!大胆将这些新规则都添加到页面的底部,而不要纠结改变属性值会带来什么结果。
这条规则将整个页面的背景颜色设置为 所计划的颜色。
现在是 <body> 元素。以上条声明,我们来逐条查看:
- width: 600px; —— 强制页面永远保持 600 像素宽。
- margin: 0 auto; —— 为 margin 或 padding 等属性设置两个值时,第一个值代表元素的上方和下方(在这个例子中设置为 0),而第二个值代表左边和右边(在这里,auto 是一个特殊的值,意思是水平方向上左右对称)。你也可以使用一个,三个或四个值,参考 这里 。
- background-color: #FF9500; —— 如前文所述,指定元素的背景颜色。我们给 body 用了一种略微偏红的橘色以与深蓝色的 “ 元素形成反差,你也可以尝试其它颜色。
- padding: 0 20px 20px 20px; —— 我们给内边距设置了四个值来让内容四周产生一点空间。这一次我们不设置上方的内边距,设置右边,下方,左边的内边距为20像素。值以上、右、下、左的顺序排列。
- border: 5px solid black; —— 直接为 body 设置 5 像素的黑色实线边框。
你可能发现页面的顶部有一个难看的间隙,那是因为浏览器会在没有任何 CSS 的情况下 给 <h1>en-US等元素设置一些默认样式。但这并不是个好主意,因为我们希望一个没有任何样式的网页也有基本的可读性。为了去掉那个间隙,我们通过设置margin: 0;来覆盖默认样式。
至此,我们已经把标题的上下内边距设置为 20 像素,并且将标题文本与 HTML 的背景颜色设为一致。
需要注意的是,这里使用了一个 text-shadow 属性,它可以为元素中的文本提供阴影。四个值含义如下:
- 第一个值设置水平偏移值 —— 即阴影右移的像素数(负值左移)。
- 第二个值设置垂直偏移值 —— 即阴影下移的像素数(负值上移)。
- 第三个值设置阴影的模糊半径 —— 值越大产生的阴影越模糊。
- 第四个值设置阴影的基色。
不妨尝试不同的值看看能得出什么结果。
最后,我们把图像居中来使页面更美观。可以复用 body 的margin: 0 auto,但是需要一点点调整。<body>元素是块级元素,意味着它占据了页面的空间并且能够赋予外边距和其他改变间距的值。而图片是内联元素,不具备块级元素的一些功能。所以为了使图像有外边距,我们必须使用display: block 给予其块级行为。
注:以上说明假定所选图片小于页面宽度(600 pixels)。更大的图片会溢出 body 并占据页面的其他位置。要解决这个问题,可以:
1)使用 图片编辑器 来减小图片宽度; 2)用 CSS 限制图片大小,即减小 <img> 元素 width 属性的值(比如 400 px)。
注:如果你暂时不能理解 display: block 和块级元素与行内元素的差别也没关系;随着你对 CSS 学习的深入,你将明白这个问题。
如果你按部就班完成本文的实践,那么最终可以得到以下页面
相关推荐:
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。