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中的Descriptor描述符学习教程
Jun 02 Python
Python 实现随机数详解及实例代码
Apr 15 Python
Python实现的购物车功能示例
Feb 11 Python
在windows下Python打印彩色字体的方法
May 15 Python
django将图片上传数据库后在前端显式的方法
May 25 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
Python求解正态分布置信区间教程
Nov 20 Python
python cv2截取不规则区域图片实例
Dec 21 Python
Python递归实现打印多重列表代码
Feb 27 Python
Python改变对象的字符串显示的方法
Aug 01 Python
详解python tcp编程
Aug 24 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 远程关机操作的代码
2008/12/05 PHP
php数组的一些常见操作汇总
2011/07/17 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
PHP asXML()函数讲解
2019/02/03 PHP
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
浅析node连接数据库(express+mysql)
2015/11/30 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
jQuery 改变P标签文本值方法
2018/02/24 jQuery
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
JS变量提升及函数提升实例解析
2020/09/03 Javascript
[54:19]完美世界DOTA2联赛PWL S2 Magma vs PXG 第二场 11.28
2020/12/01 DOTA
python直接访问私有属性的简单方法
2016/07/25 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python3+PyQt5实现文档打印功能
2018/04/24 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
2019/09/26 Python
CSS3 三维变形实现立体方块特效源码
2016/12/15 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
Shell脚本如何向终端输出信息
2014/04/25 面试题
数学系个人求职信范文
2014/01/30 职场文书
服务标兵事迹材料
2014/05/04 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
英文产品推荐信
2015/03/27 职场文书
大学生暑期实践报告
2015/07/13 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
详解gantt甘特图可拖拽、编辑(vue、react都可用 highcharts)
2021/11/27 Vue.js
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
idea下配置tomcat避坑详解
2022/04/12 Servers