使PyQt资源可用于其他Python类

时间:2015-05-15 17:49:23

标签: python matplotlib pyqt5

我正在使用PyQt开发GUI,我想使用PyQt资源系统来跟踪我的资源(图像,模板等)。我试图找到一种方法,我可以获得资源的绝对路径,以便我可以使用非PyQt类加载它们。例如,我希望能够获得资源图像的路径并使用matplotlib绘制它,例如。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from PyQt5 import QMysteryClass

qimg = QMysteryClass(":/myresource.png")
img = mpimg.imread( qimg.absolutePath() )
fig, ax = plt.subplots()
ax.imshow( img )
plt.show()

有人知道PyQt资源系统是否支持这种用途,还是我只需要以其他方式管理我的资源?

1 个答案:

答案 0 :(得分:1)

您应该阅读有关Qt资源系统的this doc。基本上你构造一个.qrc XML文件并使用pyrcc5可执行文件将它转换成你可以导入的python模块。

获得python模块后,您可以执行QFile(":/path/to/file")之类的内容来阅读内容,或者直接使用QImage,因为您需要处理图像。另外,请注意您的文件在内存中,因此您无法在具有路径的非Qt类中访问它们,这就是您需要从内存中读取数据的原因。将图像数据加载到缓冲区并将其读入matplotlib类。

来自matplotlib.image.imread doc:

  

fname 可以是字符串路径或类似Python文件的对象。如果   使用文件对象时,必须以二进制模式打开它。

因此,您应该能够将数据包装在BytesIO对象中。