PyQt 实现对话框图标

PyQt implementing dialog icons

每个 OS 都有自己的文件浏览器实现,在 PyQt 中,使用 QFileDialog 将始终显示 OS 的版本。

一些应用程序甚至有自己的这些 windows 实现,并且有自己的 back/forward/up 这些对话框的按钮图标。这里有几个例子:

铸造厂马里

欧特克玛雅

两者 windows 来自相同的代码,

from PySide import QtGui
QtGui.QFileDialog.getExistingDirectory(QtGui.QWidget(), "Select Directory"))

我假设这是因为软件(在本例中为 Maya 或 Mari)应用的样式表或其他一些实现,但关键是,我正在制作一个应用程序喜欢用同样的方法。这样一来,无论用户在什么应用程序中调用我的 GUI,它总是看起来就像他们过去在该特定软件中看到的那样。

您可以使用QStyle.standardIcon

获取全局样式图标(通常从系统继承,除非它被更改)
style = QApplication.instance().style()
icon = style.standardIcon(QStyle.SP_BrowserReload)

还有 QIcon.fromTheme,但目前仅适用于 linux。

您可以使用以下 2017/Qt5 兼容代码浏览 Autodesk Maya 中包含的所有可用图标资源,该代码会生成一个基本的 search/filter 对话框:

import maya.app.general.resourceBrowser as resourceBrowser
resBrowser = resourceBrowser.resourceBrowser()
resource_path = resBrowser.run()
print(path)  # SP_ComputerIcon.png

生成的 SP_ComputerIcon.png 与上面 Autodesk Maya 对话框截图中的图标相同。

一旦您知道图像资源路径,就可以使用任何包含的资源:

# NOTE: Maya 2017 defaults to PySide2/Qt5, this won't work in 2016 or earlier
from PySide2 import QtGui, QtWidgets

testWindow = QtWidgets.QMainWindow()
testWindow.resize(100,100)

resource_path = 'SP_ComputerIcon.png'  # grabbed using preceding code    
pixmap = QtGui.QPixmap(':/{}'.format(resource_path))
icon = QtGui.QIcon(pixmap)

button = QtWidgets.QToolButton()
button.setIcon(icon)

testWindow.setCentralWidget(button)
testWindow.show()

来源:original source