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访问纯真IP数据库的代码
May 19 Python
Python标准库之collections包的使用教程
Apr 27 Python
Python 逐行分割大txt文件的方法
Oct 10 Python
如何安装多版本python python2和python3共存以及pip共存
Sep 18 Python
python找出完数的方法
Nov 12 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
一行python实现树形结构的方法
Aug 09 Python
Python 装饰器@,对函数进行功能扩展操作示例【开闭原则】
Oct 17 Python
Python Tornado之跨域请求与Options请求方式
Mar 28 Python
python判断正负数方式
Jun 03 Python
Python偏函数实现原理及应用
Nov 20 Python
python3中数组逆序输出方法
Dec 01 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生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
jQuery live
2009/05/15 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Javascript数组中push方法用法分析
2016/10/31 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
JS 实现分页打印功能
2018/05/16 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
微信小程序页面滚动到指定位置代码实例
2019/09/07 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
Numpy数组的保存与读取方法
2018/04/04 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Python列表解析操作实例总结
2020/02/26 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
使用python检查yaml配置文件是否符合要求
2020/04/09 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
2020/04/27 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
HTML里显示pdf、word、xls、ppt的方法示例
2020/04/14 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
请假条范文大全
2014/04/10 职场文书
房屋转让协议书
2014/04/11 职场文书
民政局副局长民主生活会个人对照检查材料
2014/09/19 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
美容院员工规章制度
2015/08/05 职场文书