我正在阅读有关 PySide 的教程,我在想,我是否需要为每一件事找到自己的图标,或者是否有某种方法可以使用一些内置图标。这样,如果我想让我的小 gui 在另一个桌面环境上运行,我就不需要找到一套全新的图标。
8 回答
你需要的是 Pyside QIcon.fromTheme 函数。基本上它使用当前系统主题中所需的图标创建 QIcon 对象。
用法:
undoicon = QIcon.fromTheme("edit-undo")
“编辑撤消” - 图标“类型”/“功能”的名称可以在这里找到
这适用于 X11 系统,对于 MacOSX 和 Windows 检查 QIcon 文档 QIcon.fromTheme
编辑从网站插入这个,因为上次它是一个损坏的链接。
静态PySide.QtGui.QIcon。fromTheme (名称[, fallback=QIcon()] )
参数:
- 名称- Unicode
- 后备- PySide.QtGui.QIcon
返回类型:
返回当前图标主题中名称对应的PySide.QtGui.QIcon 。如果在当前主题中未找到此类图标,则返回后备。
最新版本的freedesktop图标规范和命名规范可以在这里获取:
- http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
- http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
从当前图标主题中获取图标:
undoicon = QIcon.fromTheme("edit-undo")
或者,如果您想为不支持主题图标的平台提供有保证的回退,您可以使用第二个参数:
undoicon = QIcon.fromTheme("edit-undo", QIcon(":/undo.png"))
笔记
默认情况下,只有 X11 支持主题图标。为了在 Mac 和 Windows 上使用主题图标,您必须在其中一个PySide.QtGui.QIcon.themeSearchPaths()中捆绑一个兼容的主题并设置适当的PySide.QtGui.QIcon.themeName()。
也可以看看
还有另一种方法可以使用默认样式的标准像素图访问 PyQt/PySide 中的一些标准内置图标。例如,以下创建一个用于打开文件的图标:
self.style().standardIcon(QtGui.QStyle.SP_DialogOpenButton)
有关标准像素图的完整列表,请参阅:
在PyQt5
中,这是一个使用播放图标创建按钮的简单示例:
play_button = QtGui.QPushButton('Play video')
play_button.setIcon(QtGui.QApplication.style().standardIcon(QtGui.QStyle.SP_MediaPlay))
Qt5 文档提供了可能的 SP(“标准像素图”)图标的列表。见enum QStyle::StandardPixmap
这里:http ://doc.qt.io/qt-5/qstyle.html
我一直无法找到标准图标的图像,因此以供将来参考: http: //nukesaq88.hatenablog.com/entry/2013/04/12/005525
而我正在使用的代码(PyQt4,Pyside 可能类似):
# In method of QMainWindow subclass
stdicon = self.style().standardIcon
style = QtGui.QStyle
reload_foo = QtGui.QAction(stdicon(style.SP_BrowserReload), '&Reload', self)
如果(显然是自动生成的)Qt 文档在 standardIcons 枚举表中有图片,那就太好了......
在 PyQt 中,窗口图标默认是 Qt 标志。我认为您将必须在 gui 中找到自己的图标。
将显示所有内置图标的 PyQt5 示例(列表来自QStyle 文档)。
from PyQt5.QtWidgets import (QApplication, QGridLayout, QPushButton, QStyle, QWidget)
class Window(QWidget):
def __init__(self):
super(Window, self).__init__()
icons = [
'SP_ArrowBack',
'SP_ArrowDown',
'SP_ArrowForward',
'SP_ArrowLeft',
'SP_ArrowRight',
'SP_ArrowUp',
'SP_BrowserReload',
'SP_BrowserStop',
'SP_CommandLink',
'SP_ComputerIcon',
'SP_DesktopIcon',
'SP_DialogAbortButton',
'SP_DialogApplyButton',
'SP_DialogCancelButton',
'SP_DialogCloseButton',
'SP_DialogDiscardButton',
'SP_DialogHelpButton',
'SP_DialogIgnoreButton',
'SP_DialogNoButton',
'SP_DialogNoToAllButton',
'SP_DialogOkButton',
'SP_DialogOpenButton',
'SP_DialogResetButton',
'SP_DialogRetryButton',
'SP_DialogSaveAllButton',
'SP_DialogSaveButton',
'SP_DialogYesButton',
'SP_DialogYesToAllButton',
'SP_DirClosedIcon',
'SP_DirHomeIcon',
'SP_DirIcon',
'SP_DirLinkIcon',
'SP_DirLinkOpenIcon',
'SP_DirOpenIcon',
'SP_DockWidgetCloseButton',
'SP_DriveCDIcon',
'SP_DriveDVDIcon',
'SP_DriveFDIcon',
'SP_DriveHDIcon',
'SP_DriveNetIcon',
'SP_FileDialogBack',
'SP_FileDialogContentsView',
'SP_FileDialogDetailedView',
'SP_FileDialogEnd',
'SP_FileDialogInfoView',
'SP_FileDialogListView',
'SP_FileDialogNewFolder',
'SP_FileDialogStart',
'SP_FileDialogToParent',
'SP_FileIcon',
'SP_FileLinkIcon',
'SP_LineEditClearButton',
'SP_MediaPause',
'SP_MediaPlay',
'SP_MediaSeekBackward',
'SP_MediaSeekForward',
'SP_MediaSkipBackward',
'SP_MediaSkipForward',
'SP_MediaStop',
'SP_MediaVolume',
'SP_MediaVolumeMuted',
'SP_MessageBoxCritical',
'SP_MessageBoxInformation',
'SP_MessageBoxQuestion',
'SP_MessageBoxWarning',
'SP_RestoreDefaultsButton',
'SP_TitleBarCloseButton',
'SP_TitleBarContextHelpButton',
'SP_TitleBarMaxButton',
'SP_TitleBarMenuButton',
'SP_TitleBarMinButton',
'SP_TitleBarNormalButton',
'SP_TitleBarShadeButton',
'SP_TitleBarUnshadeButton',
'SP_ToolBarHorizontalExtensionButton',
'SP_ToolBarVerticalExtensionButton',
'SP_TrashIcon',
'SP_VistaShield',
]
layout = QGridLayout()
for n, name in enumerate(icons):
btn = QPushButton(name)
pixmapi = getattr(QStyle.StandardPixmap, name)
icon = self.style().standardIcon(pixmapi)
btn.setIcon(icon)
layout.addWidget(btn, int(n / 4), n % 4)
self.setLayout(layout)
app = QApplication([])
w = Window()
w.show()
app.exec()