使用 pkgutil 加载 QIcons

Loading QIcons using pkgutil

我正在尝试加载图像我不知道如何使用 pkgutil.get_data() 加载图像,我更愿意使用它,因为我不想在我的代码中使用固定路径。

目前,我有这样的东西,只有当 运行从同一文件夹中退出时才有效。

...
    self.imagePixmap = QtGui.QPixmap("img/myImage.png")
...

那么问题是,如果您 运行 来自其他文件夹的脚本,路径就会乱七八糟,您会收到此错误:

QPixmap::scaled: Pixmap is a null pixmap

我想使用类似的东西:pkutil.get_data("img", "myImage.png") 来加载图像,但是这提供了来自图像文件的数据,其中 QPixmap() 需要其他类型的数据。

我能看到的唯一 "workaround" 是使用他们在此处指定的部分内容:pkgutil.get_data 并做这样的事情:

self.myPath = os.path.dirname(sys.modules[__name__].__file__)
self.imagePixmap = QtGui.QPixmap(os.path.join(self.myPath,"img/myImage.png"))

这对我来说似乎很重要 kludge。有没有更好的方法?

这是我最终发现的。我应该让 rtfm 更近一点。无论如何,您可以使用 loadFromData() 方法从 QByteArray 获取数据并将其中数据的 格式 传递给它。

self.imagePixmap = QtGui.QPixmap()
self.imagePixmap.loadFromData(get_data(__name__, "img/myImage.png"), 'png')

这里有一个link给的资料from here:

bool QPixmap::loadFromData(const QByteArray &data, const char *format = Q_NULLPTR, Qt::ImageConversionFlags flags = Qt::AutoColor)

This is an overloaded function.

Loads a pixmap from the binary data using the specified format and conversion flags.