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发送Email方法实例
Aug 21 Python
在Python中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python functools模块学习总结
May 09 Python
使用Python的Django框架结合jQuery实现AJAX购物车页面
Apr 11 Python
Python编程实现的简单Web服务器示例
Jun 22 Python
Python3 replace()函数使用方法
Mar 19 Python
Django中的forms组件实例详解
Nov 08 Python
python文字转语音的实例代码分析
Nov 12 Python
在python中logger setlevel没有生效的解决
Feb 21 Python
python3通过qq邮箱发送邮件以及附件
May 20 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 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
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
PHP图片上传代码
2013/11/04 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
Javascript 读书笔记索引贴
2010/01/11 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
今天,小程序正式支持 SVG
2019/04/20 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
利用Python的Django框架中的ORM建立查询API
2015/04/20 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
浅析python函数式编程
2020/09/26 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
Nixon手表英国官网:美国尼克松手表品牌
2020/02/10 全球购物
香港零食网购:上仓胃子
2020/06/08 全球购物
应届大专毕业生个人自荐信
2013/09/22 职场文书
函授本科毕业生自我鉴定
2013/10/16 职场文书
关于圣诞节的广播稿
2014/01/26 职场文书
数学与统计学院学生个人职业生涯规划书
2014/02/10 职场文书
党性教育心得体会
2014/09/03 职场文书
三严三实学习心得体会
2014/10/13 职场文书
狂人日记读书笔记
2015/06/30 职场文书
防震减灾主题班会
2015/08/14 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA