我正在使用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资源系统是否支持这种用途,还是我只需要以其他方式管理我的资源?
答案 0 :(得分:1)
您应该阅读有关Qt资源系统的this doc。基本上你构造一个.qrc XML文件并使用pyrcc5可执行文件将它转换成你可以导入的python模块。
获得python模块后,您可以执行QFile(":/path/to/file")
之类的内容来阅读内容,或者直接使用QImage
,因为您需要处理图像。另外,请注意您的文件在内存中,因此您无法在具有路径的非Qt类中访问它们,这就是您需要从内存中读取数据的原因。将图像数据加载到缓冲区并将其读入matplotlib类。
来自matplotlib.image.imread doc:
fname 可以是字符串路径或类似Python文件的对象。如果 使用文件对象时,必须以二进制模式打开它。
因此,您应该能够将数据包装在BytesIO
对象中。