系统内置图标位于:PySide6.QtWidgets.QStyle.StandardPixmap
所有的系统图标名称以及调用名:
python
import sys
from PySide6.QtWidgets import (
QApplication, QWidget, QPushButton, QVBoxLayout, QScrollArea, QStyle
)
class IconPreview(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QStyle 内置图标预览")
self.setGeometry(100, 100, 400, 600)
scroll = QScrollArea()
scroll.setWidgetResizable(True)
content = QWidget()
layout = QVBoxLayout(content)
# 遍历所有 StandardPixmap 枚举
all_icons = [icon for icon in dir(QStyle.StandardPixmap) if icon.startswith("SP_")]
for icon in all_icons:
print(f"图标名称:{icon}", "调用名:", getattr(QStyle.StandardPixmap, icon),"\n")
for name in all_icons:
enum_val = getattr(QStyle.StandardPixmap, name)
# icon = self.style().standardIcon(enum_val)
icon = self.style().standardIcon(enum_val)
btn = QPushButton(f"{name}")
btn.setIcon(icon)
btn.setIconSize(btn.sizeHint())
layout.addWidget(btn)
scroll.setWidget(content)
main_layout = QVBoxLayout(self)
main_layout.addWidget(scroll)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = IconPreview()
win.show()
sys.exit(app.exec())
图标名称:SP_ArrowBack
调用名: StandardPixmap.SP_ArrowBack
图标名称:SP_ArrowDown
调用名: StandardPixmap.SP_ArrowDown
图标名称:SP_ArrowForward
调用名: StandardPixmap.SP_ArrowForward
图标名称:SP_ArrowLeft
调用名: StandardPixmap.SP_ArrowLeft
图标名称:SP_ArrowRight
调用名: StandardPixmap.SP_ArrowRight
图标名称:SP_ArrowUp
调用名: StandardPixmap.SP_ArrowUp
图标名称:SP_BrowserReload
调用名: StandardPixmap.SP_BrowserReload
图标名称:SP_BrowserStop
调用名: StandardPixmap.SP_BrowserStop
图标名称:SP_CommandLink
调用名: StandardPixmap.SP_CommandLink
图标名称:SP_ComputerIcon
调用名: StandardPixmap.SP_ComputerIcon
图标名称:SP_CustomBase
调用名: StandardPixmap.SP_CustomBase
图标名称:SP_DesktopIcon
调用名: StandardPixmap.SP_DesktopIcon
图标名称:SP_DialogAbortButton
调用名: StandardPixmap.SP_DialogAbortButton
图标名称:SP_DialogApplyButton
调用名: StandardPixmap.SP_DialogApplyButton
图标名称:SP_DialogCancelButton
调用名: StandardPixmap.SP_DialogCancelButton
图标名称:SP_DialogCloseButton
调用名: StandardPixmap.SP_DialogCloseButton
图标名称:SP_DialogDiscardButton
调用名: StandardPixmap.SP_DialogDiscardButton
图标名称:SP_DialogHelpButton
调用名: StandardPixmap.SP_DialogHelpButton
图标名称:SP_DialogIgnoreButton
调用名: StandardPixmap.SP_DialogIgnoreButton
图标名称:SP_DialogNoButton
调用名: StandardPixmap.SP_DialogNoButton
图标名称:SP_DialogNoToAllButton
调用名: StandardPixmap.SP_DialogNoToAllButton
图标名称:SP_DialogOkButton
调用名: StandardPixmap.SP_DialogOkButton
图标名称:SP_DialogOpenButton
调用名: StandardPixmap.SP_DialogOpenButton
图标名称:SP_DialogResetButton
调用名: StandardPixmap.SP_DialogResetButton
图标名称:SP_DialogRetryButton
调用名: StandardPixmap.SP_DialogRetryButton
图标名称:SP_DialogSaveAllButton
调用名: StandardPixmap.SP_DialogSaveAllButton
图标名称:SP_DialogSaveButton
调用名: StandardPixmap.SP_DialogSaveButton
图标名称:SP_DialogYesButton
调用名: StandardPixmap.SP_DialogYesButton
图标名称:SP_DialogYesToAllButton
调用名: StandardPixmap.SP_DialogYesToAllButton
图标名称:SP_DirClosedIcon
调用名: StandardPixmap.SP_DirClosedIcon
图标名称:SP_DirHomeIcon
调用名: StandardPixmap.SP_DirHomeIcon
图标名称:SP_DirIcon
调用名: StandardPixmap.SP_DirIcon
图标名称:SP_DirLinkIcon
调用名: StandardPixmap.SP_DirLinkIcon
图标名称:SP_DirLinkOpenIcon
调用名: StandardPixmap.SP_DirLinkOpenIcon
图标名称:SP_DirOpenIcon
调用名: StandardPixmap.SP_DirOpenIcon
图标名称:SP_DockWidgetCloseButton
调用名: StandardPixmap.SP_DockWidgetCloseButton
图标名称:SP_DriveCDIcon
调用名: StandardPixmap.SP_DriveCDIcon
图标名称:SP_DriveDVDIcon
调用名: StandardPixmap.SP_DriveDVDIcon
图标名称:SP_DriveFDIcon
调用名: StandardPixmap.SP_DriveFDIcon
图标名称:SP_DriveHDIcon
调用名: StandardPixmap.SP_DriveHDIcon
图标名称:SP_DriveNetIcon
调用名: StandardPixmap.SP_DriveNetIcon
图标名称:SP_FileDialogBack
调用名: StandardPixmap.SP_FileDialogBack
图标名称:SP_FileDialogContentsView
调用名: StandardPixmap.SP_FileDialogContentsView
图标名称:SP_FileDialogDetailedView
调用名: StandardPixmap.SP_FileDialogDetailedView
图标名称:SP_FileDialogEnd
调用名: StandardPixmap.SP_FileDialogEnd
图标名称:SP_FileDialogInfoView
调用名: StandardPixmap.SP_FileDialogInfoView
图标名称:SP_FileDialogListView
调用名: StandardPixmap.SP_FileDialogListView
图标名称:SP_FileDialogNewFolder
调用名: StandardPixmap.SP_FileDialogNewFolder
图标名称:SP_FileDialogStart
调用名: StandardPixmap.SP_FileDialogStart
图标名称:SP_FileDialogToParent
调用名: StandardPixmap.SP_FileDialogToParent
图标名称:SP_FileIcon
调用名: StandardPixmap.SP_FileIcon
图标名称:SP_FileLinkIcon
调用名: StandardPixmap.SP_FileLinkIcon
图标名称:SP_LineEditClearButton
调用名: StandardPixmap.SP_LineEditClearButton
图标名称:SP_MediaPause
调用名: StandardPixmap.SP_MediaPause
图标名称:SP_MediaPlay
调用名: StandardPixmap.SP_MediaPlay
图标名称:SP_MediaSeekBackward
调用名: StandardPixmap.SP_MediaSeekBackward
图标名称:SP_MediaSeekForward
调用名: StandardPixmap.SP_MediaSeekForward
图标名称:SP_MediaSkipBackward
调用名: StandardPixmap.SP_MediaSkipBackward
图标名称:SP_MediaSkipForward
调用名: StandardPixmap.SP_MediaSkipForward
图标名称:SP_MediaStop
调用名: StandardPixmap.SP_MediaStop
图标名称:SP_MediaVolume
调用名: StandardPixmap.SP_MediaVolume
图标名称:SP_MediaVolumeMuted
调用名: StandardPixmap.SP_MediaVolumeMuted
图标名称:SP_MessageBoxCritical
调用名: StandardPixmap.SP_MessageBoxCritical
图标名称:SP_MessageBoxInformation
调用名: StandardPixmap.SP_MessageBoxInformation
图标名称:SP_MessageBoxQuestion
调用名: StandardPixmap.SP_MessageBoxQuestion
图标名称:SP_MessageBoxWarning
调用名: StandardPixmap.SP_MessageBoxWarning
图标名称:SP_RestoreDefaultsButton
调用名: StandardPixmap.SP_RestoreDefaultsButton
图标名称:SP_TabCloseButton
调用名: StandardPixmap.SP_TabCloseButton
图标名称:SP_TitleBarCloseButton
调用名: StandardPixmap.SP_TitleBarCloseButton
图标名称:SP_TitleBarContextHelpButton
调用名: StandardPixmap.SP_TitleBarContextHelpButton
图标名称:SP_TitleBarMaxButton
调用名: StandardPixmap.SP_TitleBarMaxButton
图标名称:SP_TitleBarMenuButton
调用名: StandardPixmap.SP_TitleBarMenuButton
图标名称:SP_TitleBarMinButton
调用名: StandardPixmap.SP_TitleBarMinButton
图标名称:SP_TitleBarNormalButton
调用名: StandardPixmap.SP_TitleBarNormalButton
图标名称:SP_TitleBarShadeButton
调用名: StandardPixmap.SP_TitleBarShadeButton
图标名称:SP_TitleBarUnshadeButton
调用名: StandardPixmap.SP_TitleBarUnshadeButton
图标名称:SP_ToolBarHorizontalExtensionButton
调用名: StandardPixmap.SP_ToolBarHorizontalExtensionButton
图标名称:SP_ToolBarVerticalExtensionButton
调用名: StandardPixmap.SP_ToolBarVerticalExtensionButton
图标名称:SP_TrashIcon
调用名: StandardPixmap.SP_TrashIcon
图标名称:SP_VistaShield
调用名: StandardPixmap.SP_VistaShields
所有的图标图例








设置方法:
1、基本调用:
先创建,再调用。
不同的style()有不同的风格的图标。
python
icon = app.style().standardIcon(QStyle.StandardPixmap.SP_MediaSeekBackward)
btn1.setIcon(icon)
2、设置图标尺寸:
python
btn2.setIconSize(QSize(10,10))
setIconSize()只能方法显示内置图标的最大尺寸,有的是32*32,有的是128*128,超过实际尺寸也不会显示更大的。使用下面方法进行放大显示:
python
import sys
from PySide6.QtWidgets import *
from PySide6.QtGui import QIcon, QPixmap
from PySide6.QtCore import QSize, Qt
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(100, 100, 300, 200)
btn = QPushButton(self)
btn.setGeometry(50, 50, 200, 200)
# --------------------------
# 1. 获取内置图标(任意SP_开头)
# --------------------------
icon = self.style().standardIcon(QStyle.SP_ComputerIcon)
# --------------------------
# 2. 把内置图标转成 pixmap 并放大
# --------------------------
target_size = QSize(160, 160) # 想要多大就多大
pixmap = icon.pixmap(target_size) # 强制放大
pixmap = pixmap.scaled(target_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
# --------------------------
# 3. 设置给按钮
# --------------------------
btn.setIcon(QIcon(pixmap))
btn.setIconSize(target_size) # 必须写
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec())

这种方法图标会因为强制放大而分辨率下降。
3、图标位置
默认图标在左,可以设为右(只有左右):
python
btn2.setLayoutDirection(Qt.LayoutDirection.RightToLeft)

图标可以间接被"挤到"文字上下:
python
# 图标在顶部
btn.setStyleSheet("""
QPushButton {
text-align: bottom;
padding-bottom: 10px;
padding-right: 50px;
min-height: 80px;}
""")

但是水平方向总是位于文字的左或右侧。
使用样式表设置
使用样式表,从资源文件中调用图像,比setIcon()的方法更加灵活和好控制。
由于资源文件只支持本地资源,首先导出所有的内置图标为本地图片文件:
python
import os
import sys
from PySide6.QtCore import QSize
from PySide6.QtWidgets import (
QApplication, QStyle, QStyleFactory
)
if __name__ == "__main__":
app = QApplication(sys.argv)
all_icons = [icon for icon in dir(QStyle.StandardPixmap) if icon.startswith("SP_")]
all_styles = QStyleFactory.keys()
for s in all_styles:
style = QStyleFactory.create(s)
for name in all_icons:
enum_val = getattr(QStyle.StandardPixmap, name)
icon = style.standardIcon(enum_val)
pixmap = icon.pixmap(QSize(256,256))
image = pixmap.toImage()
file_path = f"E:\\2026\HMI_demo\\UI\SRC\system_icons\\{s}\\{name}.png"
folder_path = os.path.dirname(file_path)
# 自动创建所有缺失的文件夹
os.makedirs(folder_path, exist_ok=True)
# if not os.path.isfile(file_path): # 文件不存在,创建文件
# with open(file_path, 'w') as file: # 写方式打开文件
# file.write('')
image.save(file_path)
app.exit()
Windows系统,共内置了3个style:

导出后发现这3个主题的图标文件是一样的,所以用一个就够了。
把3个目录中的任意一个下的所有图片文件拷贝至UI/SRC/system_icons下,并删除3个文件夹:

打开Qt Designer,新建资源文件:

批量添加图片文件进资源文件:

关闭Qt Designer,用pyrcc工具将资源文件转为py文件:

- 导入资源文件,并在样式表中使用image: url()调用图像资源:
python
import os
import sys
from PySide6.QtCore import QSize
from PySide6.QtWidgets import (
QApplication, QStyle, QStyleFactory, QPushButton
)
from UI.SRC import system_icons_rc
if __name__ == "__main__":
app = QApplication([])
btn = QPushButton("油泵启动")
btn.setStyleSheet(f"""QPushButton {{
font-size: 24px;
text-align:right;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 40px;
/* 从 qrc 加载图片 */
image: url(:/icons/system_icons/SP_DialogApplyButton.png);
/* 图标靠左 */
image-position: left center;
}}
""")
btn.setFixedSize(200,60)
btn.show()
app.exec()

- 使用border-image设置满幅图片:
python
import os
import sys
from PySide6.QtCore import QSize
from PySide6.QtWidgets import (
QApplication, QStyle, QStyleFactory, QPushButton, QWidget, QVBoxLayout
)
from UI.SRC import system_icons_rc
if __name__ == "__main__":
app = QApplication([])
widget = QWidget()
layout = QVBoxLayout()
btn = QPushButton("油泵启动")
btn.setStyleSheet(f"""QPushButton {{
font-size: 24px;
text-align:right;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 10px;
padding-right: 40px;
/* 从 qrc 加载图片 */
image: url(:/icons/system_icons/SP_DialogApplyButton.png);
/* 图标靠左 */
image-position: left center;
}}
""")
btn.setFixedSize(200,60)
btn2 = QPushButton()
btn2.setFixedSize(80,80)
btn2.setStyleSheet(f"""QPushButton {{
/* 从 qrc 加载图片 */
border-image: url(:/icons/system_icons/SP_ArrowUp.png);
background-color: rgb(118, 118, 118);
}}""")
layout.addWidget(btn2)
layout.addWidget(btn)
widget.setLayout(layout)
widget.show()
app.exec()
