Python GUI库PyQt5样式QSS子控件介绍


Posted in Python onFebruary 25, 2020

QSS子控件

QSS子控件实际上也是一种选择器,其应用在一些复合控件上,典型的如QComboBox,该控件的外观是,有一个矩形的外边框,右边有一个下拉箭头,点击之后会弹出下拉列表,例如:

QComboBox:drop-down {image:url(dropdown.png)}

上面的样式指定所有的QComboBox下拉箭头的图片是自定义的,图片文件为dropdown.png

::drop-down子控件选择器可以与上面提到到的选择器一起联合使用,例如

QComboBox#myQComboBox::drop-down {image:url(dropdown.png)}

表示为指定的id为myQComboBox的QComboBox控件的下拉箭头自定义图片,需要注意的是,子控件选择器实际上是选择复合控件的一部分,也就是对复合控件的一部分应用样式,例如为QComboBox下拉箭头指定图片,而不是QComboBox本身指定图片

QSS伪状态

QSS伪状态选择器是以冒号开头的一个选择表达式,例如hover,表示当鼠标指针经过时的状态,伪状态选择器限制了当控件处于某种状态才可以使用的QSS规则,伪状态只能描述一个控件或者一个复合控件的自控件的状态,所以它只能放在选择器的最后面,例如

QComboBox:hover{background-color:red;}

表示到鼠标经过QComboBox时.其背景色指定为红色

该伪状态:hover描述的是QComboBox的状态,除可以描述所选择的控件外,伪状态还可以描述子控件选择器所选择的复合控件的子控件的状态

QComboBox::drop-down:hover{background-color:red}

表示当鼠标指针经过QComboBox的下拉箭头时,该下拉箭头的背景色变成红色

此外,伪状态还可以用一个感叹号来表示状态,例如,:hove表示鼠标指针经过的状态,:!hover表示鼠标没有经过的状态,多种伪状态可以同时使用,例如

QCheckBox:hover:checked{color:white}

表示当鼠标指针经过一个选中的QCheckBox时,设置其文字的前景色为白色

QSS提供了很多的伪状态,一些伪状态只能用在特定的控件上,具体有哪些伪状态,在pyqt帮助文档中有详细的列表

实例:QComboBox的样式

import sys
from PyQt5.QtWidgets import *

class WindowDemo(QWidget):
  def __init__(self):
    super(WindowDemo, self).__init__()
    self.initUI()
  def initUI(self):
    #实例化列表控件
    combo=QComboBox(self)
    #设置列表控件的名称
    combo.setObjectName('myQComboBox')

    #添加条目到列表控件
    combo.addItem('Window')
    combo.addItem('Ubuntu')
    combo.addItem('Red Hat')
    #控件移动到指定位置
    combo.move(50,50)
    #设置窗口的标题与初始窗口的属性
    self.setGeometry(250,200,320,150)
    self.setWindowTitle('QComboBox样式')

    #设置样式

    qssStyle='''
    QComboBox#myQComboBox::drop-down{
    image:url(./images/dropdown.png)
    } 
    QComboBox#myQComboBox::drop-down:hover{
    background-color:red
    }
    '''
    self.setStyleSheet(qssStyle)
if __name__ == '__main__':
  app=QApplication(sys.argv)
  win=WindowDemo()
  win.show()
  sys.exit(app.exec_())

运行程序,运行效果如下

Python GUI库PyQt5样式QSS子控件介绍Python GUI库PyQt5样式QSS子控件介绍

QDarkStyleSheet样式表

除自己编写的QSS样式表,网上还有很多质量很高的QSS样式表。比如QDarkStyleSheet,它是一个用于PyQt应用程序的深黑色样式表

安装

pip install qdarkstyle

实例:QDarKStyleSheet的显示界面

import logging
import sys
from PyQt5 import QtWidgets, QtCore
# make the example runnable without the need to install
from os.path import abspath, dirname
sys.path.insert(0, abspath(dirname(abspath(__file__)) + '/..'))

import qdarkstyle
import ui.example_pyqt5_ui as example_ui


def main():
  """
  Application entry point
  """
  logging.basicConfig(level=logging.DEBUG)
  # create the application and the main window
  app = QtWidgets.QApplication(sys.argv)
  window = QtWidgets.QMainWindow()

  # setup ui
  ui = example_ui.Ui_MainWindow()
  ui.setupUi(window)
  ui.bt_delay_popup.addActions([
    ui.actionAction,
    ui.actionAction_C
  ])
  ui.bt_instant_popup.addActions([
    ui.actionAction,
    ui.actionAction_C
  ])
  ui.bt_menu_button_popup.addActions([
    ui.actionAction,
    ui.actionAction_C
  ])
  item = QtWidgets.QTableWidgetItem("Test")
  item.setCheckState(QtCore.Qt.Checked)
  ui.tableWidget.setItem(0, 0, item)
  window.setWindowTitle("QDarkStyle example")

  # tabify dock widgets to show bug #6
  window.tabifyDockWidget(ui.dockWidget1, ui.dockWidget2)

  # setup stylesheet
  app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())

  # auto quit after 2s when testing on travis-ci
  if "--travis" in sys.argv:
    QtCore.QTimer.singleShot(2000, app.exit)

  # run
  window.show()
  app.exec_()


if __name__ == "__main__":
  main()

运行效果图

Python GUI库PyQt5样式QSS子控件介绍

如果你对PyQt5样式QSS感兴趣的话可以再看看《Python GUI库PyQt5图形和特效样式QSS介绍》,更多关于Python GUI库PyQt5样式QSS的文章大家可以点击下面的相关链接

Python 相关文章推荐
Python的Django框架中自定义模版标签的示例
Jul 20 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
python中找出numpy array数组的最值及其索引方法
Apr 17 Python
python语言元素知识点详解
May 15 Python
python爬虫之自制英汉字典
Jun 24 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
python实现的爬取电影下载链接功能示例
Aug 26 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
tensorflow多维张量计算实例
Feb 11 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 #Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 #Python
python 伯努利分布详解
Feb 25 #Python
Python3如何在Windows和Linux上打包
Feb 25 #Python
python实现可下载音乐的音乐播放器
Feb 25 #Python
Python实现分数序列求和
Feb 25 #Python
python等差数列求和公式前 100 项的和实例
Feb 25 #Python
You might like
安装APACHE
2007/01/15 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php并发加锁示例
2016/10/17 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
该如何加载google-analytics(或其他第三方)的JS
2010/05/13 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
浅谈javascript事件取消和阻止冒泡
2015/05/26 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
Node.js引入UIBootstrap的方法示例
2018/05/11 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
vue+elementUI实现图片上传功能
2019/08/20 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python中装饰器高级用法详解
2017/12/25 Python
python http基本验证方法
2018/12/26 Python
python如何安装下载后的模块
2020/07/03 Python
波兰家具和室内装饰品购物网站:Vivre
2018/04/10 全球购物
英国最大的婴儿监视器网上商店:Baby Monitors Direct
2018/04/24 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
几个常见的消息中间件(MOM)
2014/01/08 面试题
《小小竹排画中游》教学反思
2014/02/26 职场文书
保险公司开门红口号
2014/06/21 职场文书
招标授权委托书样本
2014/09/23 职场文书
合作协议书模板
2014/10/10 职场文书
会计师事务所实习证明
2014/11/16 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js