实战PyQt5: 119-图标处理类QIcon

QIcon简介

在Qt中, QIcon类提供了处于不同模式和状态下的可缩放图标。QIcon可以从给定的一组像素图生成较小,较大,激活和禁用等情况小的像素图。Qt窗口部件使用这些像素图来显示代表特定动作的图标。

QIcon最简单的用法是文件或资源中创建一个,然后就可以使用它了,例如:

button = QToolButton()
button.setIcon(QIcon('open.png')

要取消图标设置,只需要在其位置上设置一个空图标即可:

button.setIcon(QIcon())

注:从Qt 4.2开始,QIcon开始支持SVG图标

QIcon.Mode定义了图标的四种模式:

  • QIcon.Normal: 控件或窗口为使能但未激活状态。
  • QIocn.Disabled: 控件或窗口为禁用状态。
  • QIcon.Active: 控件或窗口为激活状态。
  • QIcon.Selected: 控件或窗口为选中状态。

当控件或窗口的状态发生切换时,默认的图标绘制函数会自动根据控件或窗口的状态重新绘制图标。如果控件或者窗口还有所谓的开关状态(比如一个按钮可以有按下和弹起两个状态),则还可以根据state参数来选择不同的图像。state参数由QIcon.State枚举类型来定义,它有以下取值:

  • QIcon.On: 控件或窗口处于开的状态。
  • QIcon.Off: 控件或窗口处于关的状态。

综合起来,一个图标可能有八种不同的表现形式,如下图所示:

实战PyQt5: 119-图标处理类QIcon

QIcon的不同状态(图片来源: doc.qt.io)

Qt内置图标

在Qt程序中,通过QStyle.StandardPixmap枚举,该枚举描述了可用的标准像素图。QIcon可以使用这是内置的位图图标。这些内置位图图标有:

  • QStyle.SP_TitleBarMenuButton (0): 标题栏上的菜单按钮。
  • QStyle.SP_TitleBarMinButton (1): 最小化标题栏上的按钮(例如QMdiSubWindow中的按钮)。
  • QStyle.SP_TitleBarMaxButton (2): 最大化标题栏上的按钮。
  • QStyle.SP_TitleBarCloseButton (3): 标题栏上的“关闭”按钮。
  • QStyle.SP_TitleBarNormalButton (4): 标题栏上的“正常(还原)”按钮。
  • QStyle.SP_TitleBarShadeButton (5): 标题栏上的阴影按钮。
  • QStyle.SP_TitleBarUnshadeButton (6): 标题栏上的阴影按钮。
  • QStyle.SP_TitleBarContextHelpButton (7): 标题栏上的上下文帮助按钮。
  • QStyle.SP_DockWidgetCloseButton (8): 停靠窗口上的“关闭”按钮(另请参见QDockWidget)。
  • QStyle.SP_MessageBoxInformation (9): “信息”图标。
  • QStyle.SP_MessageBoxWarning (10): “警告”图标。
  • QStyle.SP_MessageBoxCritical (11): “致命错误”图标。
  • QStyle.SP_MessageBoxQuestion (12): “问题”图标。
  • QStyle.SP_DesktopIcon (13): “桌面”图标。
  • QStyle.SP_TrashIcon (14): “垃圾箱”图标。
  • QStyle.SP_ComputerIcon (15): “我的电脑”图标。
  • QStyle.SP_DriveFDIcon (16): 软盘图标。
  • QStyle.SP_DriveHDIcon (17): 硬盘驱动器图标。
  • QStyle.SP_DriveCDIcon (18): CD图标。
  • QStyle.SP_DriveDVDIcon (19): DVD图标。
  • QStyle.SP_DriveNetIcon (20): 网络图标。
  • QStyle.SP_DirOpenIcon (21): 打开目录图标。
  • QStyle.SP_DirClosedIcon (22): 关闭的目录图标。
  • QStyle.SP_DirLinkIcon (23): 链接到目录图标。
  • QStyle.SP_FileIcon (25): 文件图标。
  • QStyle.SP_FileLinkIcon (26): 链接到文件图标。
  • QStyle.SP_ToolBarHorizontalExtensionButton (27): 水平工具栏的扩展按钮。
  • QStyle.SP_ToolBarVerticalExtensionButton (28): 垂直工具栏的扩展按钮。
  • QStyle.SP_FileDialogStart (29): 文件对话框中的“开始”图标。
  • QStyle.SP_FileDialogEnd (30): 文件对话框中的“结束”图标。
  • QStyle.SP_FileDialogToParent (31): 文件对话框中的“父目录”图标。
  • QStyle.SP_FileDialogNewFolder (32): 文件对话框中的“创建新文件夹”图标。
  • QStyle.SP_FileDialogDetailedView (33): 文件对话框中的详细视图图标。
  • QStyle.SP_FileDialogInfoView (34): 文件对话框中的文件信息图标。
  • QStyle.SP_FileDialogContentsView (35): 文件对话框中的内容视图图标。
  • QStyle.SP_FileDialogListView (36): 文件对话框中的列表视图图标。
  • QStyle.SP_FileDialogBack (37): 文件对话框中的后退箭头。
  • QStyle.SP_DirIcon (38): 目录图标。
  • QStyle.SP_DialogOkButton (39): QDialogBu​ttonBox中的标准OK按钮的图标。
  • QStyle.SP_DialogCancelButton (40): QDialogBu​​ttonBox中的标准“取消”按钮的图标。
  • QStyle.SP_DialogHelpButton (41): QDialogBu​​ttonBox中的标准帮助按钮的图标。
  • QStyle.SP_DialogOpenButton (42): QDialogBu​​ttonBox中的标准“打开”按钮的图标。
  • QStyle.SP_DialogSaveButton (43): QDialogBu​​ttonBox中的标准“保存”按钮的图标。
  • QStyle.SP_DialogCloseButton (44): QDialogBu​​ttonBox中的标准“关闭”按钮的图标。
  • QStyle.SP_DialogApplyButton (45): QDialogBu​​ttonBox中的标准“应用”按钮的图标。
  • QStyle.SP_DialogResetButton (46): QDialogBu​​ttonBox中的标准Reset按钮的图标。
  • QStyle.SP_DialogDiscardButton (47): QDialogBu​​ttonBox中的标准Discard按钮的图标。
  • QStyle.SP_DialogYesButton (48): QDialogBu​​ttonBox中的标准“是”按钮的图标。
  • QStyle.SP_DialogNoButton (49): QDialogBu​​ttonBox中的标准No按钮的图标。
  • QStyle.SP_ArrowUp (50): 向上的图标箭头。
  • QStyle.SP_ArrowDown (51): 向下的图标箭头。
  • QStyle.SP_ArrowLeft (52): 图标箭头指向左。
  • QStyle.SP_ArrowRight (53): 图标箭头指向右。
  • QStyle.SP_ArrowBack (54): 当布局方向为Qt.LeftToRight时,等效于SP_ArrowLeft ,否则为SP_ArrowRight。
  • QStyle.SP_ArrowForward (55): 当布局方向为Qt.LeftToRight时,等效于SP_ArrowRight ,否则为SP_ArrowLeft。
  • QStyle.SP_DirHomeIcon (56): 主目录图标。
  • QStyle.SP_CommandLink (57): 用于指示Vista风格命令链接字形的图标。
  • QStyle.SP_VistaShield (58): 用于指示Windows Vista上的UAC提示的图标。在所有其他平台上,这将返回一个空的像素图或图标。
  • QStyle.SP_BrowserReload (59): 指示应重新加载当前页面的图标。
  • QStyle.SP_BrowserStop (60): 指示页面加载应停止的图标。
  • QStyle.SP_MediaPlay (61): 指示媒体应开始播放的图标。
  • QStyle.SP_MediaStop (62): 指示媒体应停止播放的图标。
  • QStyle.SP_MediaPause (63): 指示媒体应暂停播放的图标。
  • QStyle.SP_MediaSkipForward (64): 指示媒体应向前跳的图标。
  • QStyle.SP_MediaSkipBackward (65): 指示媒体应向后跳的图标。
  • QStyle.SP_MediaSeekForward (66): 表示媒体应向前看的图标。
  • QStyle.SP_MediaSeekBackward (67): 指示媒体应向后搜索的图标。
  • QStyle.SP_MediaVolume (68): 指示音量控制的图标。
  • QStyle.SP_MediaVolumeMuted (69): 表示音量控制已静音的图标。
  • QStyle.SP_LineEditClearButton (70): QLineEdit中标准清除按钮的图标。这个枚举值是在Qt 5.2中添加的。

测试

测试代码显示Qt的内置图标,完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QColor,QIcon
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout, QToolButton, QStyle
 
class DemoIcon(QWidget):
    def __init__(self, parent=None):
        super(DemoIcon, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战PyQt5: 内置图标演示')      
              
        self.initUi()
        
    def initUi(self):
        layout = QGridLayout()
        
        line_count = 16 #每一行的显示个数
        index = 0
        
        #根据Qt的枚举变量来显示图标
        for key in dir(QStyle):
            value = getattr(QStyle, key)
            if isinstance(value, QStyle.StandardPixmap):
                if key != 'SP_CustomBase' and value < 71:               
                    print (key, value)
                    btn = QToolButton()
                    btn.setFixedSize(32,32)
                    btn.setIcon(QApplication.style().standardIcon(value))
                    btn.setToolTip('{0}: {1}'.format(key, value))
                    layout.addWidget(btn, index//line_count, index % line_count)
                    index += 1
                    
        self.setLayout(layout)
 
    
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = DemoIcon()
    window.show()
    sys.exit(app.exec())   

运行结果如下图:

实战PyQt5: 119-图标处理类QIcon

Qt中的内置图标

本文知识点

  • QIcon类提供了处于不同模式和状态下的可缩放图标。
  • 使用Qt内置图标。
  • PyQt中根据枚举值得到枚举变量名。

前一篇: 实战PyQt5: 118-调色板QPalette

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值