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查找第k小元素代码分享
Dec 18 Python
Python中字符串对齐方法介绍
May 21 Python
python安装教程
Feb 28 Python
Python绘制3D图形
May 03 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
Python利用matplotlib做图中图及次坐标轴的实例
Jul 08 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
Python3.7安装keras和TensorFlow的教程图解
Jun 18 Python
详细分析Python垃圾回收机制
Jul 01 Python
python属于哪种语言
Aug 16 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
4种方法python批量修改替换列表中元素
Apr 07 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
2016/10/31 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
PHP实现本地图片转base64格式并上传
2020/05/29 PHP
Javascript 布尔型分析
2008/12/22 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
Python中的多重装饰器
2015/04/11 Python
Python unittest单元测试框架总结
2018/09/08 Python
实例介绍Python中整型
2019/02/11 Python
python粘包问题及socket套接字编程详解
2019/06/29 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python suds访问webservice服务实现
2020/06/26 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
自荐信范文
2013/12/10 职场文书
医院实习接收函
2014/01/12 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
开票员岗位职责
2015/02/12 职场文书
学生病假条怎么写
2015/08/17 职场文书
2019年图书室自查报告范本
2019/10/12 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android