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: 控件或窗口处于关的状态。
综合起来,一个图标可能有八种不同的表现形式,如下图所示:
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): QDialogButtonBox中的标准OK按钮的图标。
- QStyle.SP_DialogCancelButton (40): QDialogButtonBox中的标准“取消”按钮的图标。
- QStyle.SP_DialogHelpButton (41): QDialogButtonBox中的标准帮助按钮的图标。
- QStyle.SP_DialogOpenButton (42): QDialogButtonBox中的标准“打开”按钮的图标。
- QStyle.SP_DialogSaveButton (43): QDialogButtonBox中的标准“保存”按钮的图标。
- QStyle.SP_DialogCloseButton (44): QDialogButtonBox中的标准“关闭”按钮的图标。
- QStyle.SP_DialogApplyButton (45): QDialogButtonBox中的标准“应用”按钮的图标。
- QStyle.SP_DialogResetButton (46): QDialogButtonBox中的标准Reset按钮的图标。
- QStyle.SP_DialogDiscardButton (47): QDialogButtonBox中的标准Discard按钮的图标。
- QStyle.SP_DialogYesButton (48): QDialogButtonBox中的标准“是”按钮的图标。
- QStyle.SP_DialogNoButton (49): QDialogButtonBox中的标准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())
运行结果如下图:
Qt中的内置图标
本文知识点
- QIcon类提供了处于不同模式和状态下的可缩放图标。
- 使用Qt内置图标。
- PyQt中根据枚举值得到枚举变量名。