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创建系统目录的方法
Mar 11 Python
Python虚拟环境virtualenv的安装与使用详解
May 28 Python
python3操作微信itchat实现发送图片
Feb 24 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
python os用法总结
Jun 08 Python
简单了解Python3里的一些新特性
Jul 13 Python
python3 mmh3安装及使用方法
Oct 09 Python
Python实现微信好友的数据分析
Dec 16 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
Django模板标签{% for %}循环,获取制定条数据实例
May 14 Python
深入了解NumPy 高级索引
Jul 24 Python
Django实现文章详情页面跳转代码实例
Sep 16 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
第三章 php操作符与控制结构代码
2011/12/30 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP不用递归实现无限分级的例子分享
2014/04/18 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
jquery动态加载js三种方法实例
2013/08/03 Javascript
Bootstrap基础学习
2015/06/16 Javascript
使用AngularJS编写较为优美的JavaScript代码指南
2015/06/19 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
python网络编程之数据传输UDP实例分析
2015/05/20 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
大学学年自我鉴定
2013/10/28 职场文书
市场营销策划方案
2014/06/11 职场文书
体育教师求职信
2014/06/30 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
学校运动会广播稿范文
2014/10/02 职场文书
党员年度个人总结
2015/02/14 职场文书
小爸爸观后感
2015/06/15 职场文书
WINDOWS下安装mysql 8.x 的方法图文教程
2022/04/19 MySQL
Mysql 文件配置解析介绍
2022/05/06 MySQL
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server