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操作Mysql实例代码教程在线版(查询手册)
Feb 18 Python
详解Python中的from..import绝对导入语句
Jun 21 Python
创建pycharm的自定义python模板方法
May 23 Python
使用python读取csv文件快速插入数据库的实例
Jun 21 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
python使用rpc框架gRPC的方法
Aug 24 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
Numpy 中的矩阵求逆实例
Aug 26 Python
使用Python刷淘宝喵币(低阶入门版)
Oct 30 Python
python 按钮点击关闭窗口的实现
Mar 04 Python
Matlab中plot基本用法的具体使用
Jul 17 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
德生H-501的评价与改造
2021/03/02 无线电
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP定时任务延缓执行的实现
2014/10/08 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
详解PHP版本兼容之openssl调用参数
2018/07/25 PHP
一些不错的js函数ajax
2008/08/20 Javascript
javascript动态加载三
2012/08/22 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
js实现可键盘控制的简单抽奖程序
2016/07/13 Javascript
浅谈javascript中的Function和Arguments
2016/08/30 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
写一个移动端惯性滑动&回弹Vue导航栏组件 ly-tab
2018/03/06 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
深入Vue-Router路由嵌套理解
2018/08/13 Javascript
tracking.js页面人脸识别插件使用方法
2020/04/16 Javascript
vue 解决异步数据更新问题
2019/10/29 Javascript
Python实现的一个简单LRU cache
2014/09/26 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
会计求职信
2014/05/29 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
信访工作个人总结
2015/03/03 职场文书
创卫工作总结2015
2015/04/22 职场文书
导游词之无锡东林书院
2019/12/11 职场文书
Python中使用tkFileDialog实现文件选择、保存和路径选择
2022/05/20 Python