qss qcombobox_《快速掌握PyQt5》第二十八章 QSS

f7882bc5bfa11667d3dd289b8f3b1544.png

QSS即Qt StyleSheet(Qt样式表)的简称,是一种用来自定义控件外观的强大机制。它的句法跟CSS非常相似,所以熟悉了CSS的读者可以很快的掌握本章内容。不熟悉的小伙伴可以仔细阅读本章,也算是对CSS语法的一种了解(爬虫中会用到CSS选择器)。

CSS可以让网页更美观,而QSS可以让我们的程序界面更加漂亮。(单押 ヘ( ̄ω ̄ヘ) ♪)

28.1 基本规则

每条QSS样式都由两部分组成:

1. 选择器,该部分指定要美化的控件

2. 声明,该部分指定要在控件上使用的属性和值

例如下面这条样式:

QPushButton 

QPushButton是设置的选择器,而大括号里的color: red分别为属性和值。这条样式会将所有的QPushButoon实例和它子类的文本颜色都设置为红色。我们直接来示范一下看下效果:

import 

在上面这个小程序中我们定义了两个类,第二个SubButton类继承自QPushButton并在Demo类中实例化。之后我们在程序入口处定义一条QSS,并调用setStyleSheet()方法设置整个程序的样式。

运行截图如下,可以发现子类也确实受到了影响:

2b012582c6a7adb04dc31a7757bbe8f8.png

可以声明多个属性和值,各对属性和值之间用分号分隔:

QPushButton 

我们把程序中qss变量换成上面这句,我们发现按钮背景被设置成了蓝色:

429df0eac38f62b4d3d4410a917ea404.png

当然也可以同时指定多个选择器:

QPushButton

以上写法等同于:

QPushButton 

我们往程序中加入QLabel和QLineEdit控件看下效果:

import 

运行截图如下,三个控件的文字颜色都变成了红色:

282deb00942dc6573c6cfb3e1b622f89.png

​28.2 选择器类型

选择器不单单只有上面提到的那种写法,以下表格总结了最常用的几种选择器类型:

9349768b9727b5571ac7da65b9bb6f72.png

我们来写一个QSS样式,把上面的选择器类型都包含进来,然后再放到程序中看下(旁边加上了解释):

* 

代码如下:

import 

1. 实例化两个按钮,给button2添加name属性,并设为btn。这样button1的背景色就为蓝色,而button2的为绿色;

2. QLineEdit实例用于验证“类选择器”,笔者这里特地再写了一个SubLineEdit类并实例化来证明“类选择器”不会影响子类;

3. 实例化一个QComboBox控件,并调用setObjectName()方法将其objectName设置为cb;

4. 实例化一个QGroupBox控件,添加一个QLabel和一个QStackedWidget控件(后者又包含一个QLabel控件)。这里这样做是为了解释下直接包含和间接包含:在这里gb直接包含label1但间接包含label2。所以根据QSS样式,label1和label2的文本颜色都为蓝色,但只有直接包含的label1字体大小为30px

运行后我们发现达到期望效果(非常丑):

3602bf12387da174312919383621a9c2.png

​​有些小伙伴可能就问了:* {color: red} 明明这条样式是让所有的文本颜色变为红色,但是有些控件的文本并没有根据这条来,为什么?

这里就涉及到一个“具体与笼统”的概念,当选择器写的越具体,选择器的优先程度越高。通配符*这一选择器写法非常笼统,而之后几条样式的选择器都是指定了控件名称的,比通配符更加具体,所以优先度更高。再比如这两条样式:

QPushButton 

第一条规定所有QPushButton实例及子类的背景色为蓝色,但第二条中指定了name属性,比第一条更加具体,所以背景色为绿色,并不按照第一条来。

28.3 子控件

先来举个栗子 来了解下什么是子控件:我们知道QComboBox由一个矩形框和一个下拉按钮组成,而这个下拉按钮就是QComboBox的子控件了,PyQt5允许我们使用QSS对其进行样式化。

d4969d9e51d0d0ce38f4ace79cca0213.png

请看下面程序示例:

import 

1. 通过在控件名后面加两个英文状态下的冒号::然后再写要获取的子控件drop-down就可以了。在这里我们把QComboBox的子控件的图片换成了我们自已定义的(注意将drop-down.png图片文件放到项目目录中)。

图片下载地址(下面还会用到):https://www.easyicon.net/download/png/526255/24/

运行截图如下:

3bf53b2892fe14950084520969c7a7d9.png

​我们再用QSpinBox示范下,原始控件长这样,子控件由一个上调按钮和一个下调按钮组成:

88fa265bff69d56aa4009cafe5815500.png

我们接下来把子控件的按钮给换掉,程序如下:

import 

图片下载地址:

up-arrow.png: https://www.easyicon.net/download/png/526252/24/

down-arrow.png: https://www.easyicon.net/download/png/526255/24/ 之前那张

运行截图如下:

6c6396c207a3b8fb1ac4c0c65515d7ee.png

​28.4 伪状态

伪状态选择器可以让我们针对某控件的不同状态进行QSS样式化操作,下面我们以QPushButton和QComboBox为例:

import 

伪状态选择器写法就是在控件名后加一个英文状态下的冒号:,再加上伪状态即可。以下是对三条QSS样式的解释:

QPushButton

运行截图如下,首先是原始状态:

02a57deae4789e638f53881ec5573c49.png

​接下来把鼠标悬停在button1上:

b9e462668bce5b6a9675eea50029e9ed.png

然后然button2处于按下状态:

0a765d11f79ab1e4837c6731e2a202ed.png

最后让鼠标悬停在QComboBox的下拉框上:

31031c1f6455078c9d89ee2cc8f3f834.png

我们知道如果在if判断语句中加个感叹号!就表示相反(否),那我们也可以在伪状态前加上这个感叹号!来表示相反状态。比如:

QPushButton

那此时这条样式就会这样解释:当鼠标不悬停在QPushButton实例或其子类上时,背景颜色才会是红色。

小伙伴可以自己试验下。

28.5 小结

1. QSS样式用的好,可以让简单的程序也变得高大上起来,用户的好感度也会上去;

2. 读者可以在Qt Assistant中输入Qt Style Sheets Reference查询所有的属性和值,子控件以及伪状态等:

78406600650f8703c5785b2ee08929c4.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值